使用选定的索引值更新文本框时,AJAX下拉扩展器问题

时间:2010-01-11 17:30:03

标签: javascript ajax gridview dropdownextender

我有一个gridview,默认情况下所有行都可以编辑。大多数列需要一个简单的文本框,其中包含一些格式化验证器,这不是问题。

但我有1列需要用户可以选择的选项列表。 要做到这一点,我使用Ajax Drop Down Extender绑定到文本框,所以当单击文本框时,它会给他们列表......很简单。

用户从下拉菜单中选择一个选项后出现问题,我似乎无法让文本框用新选择的值更新它的值。

这是gridview列中的ItemTemplate。

<%--  PRIORITY --%> 
                <asp:TemplateField HeaderText="PRI" SortExpression="PRIORITY">
                    <ItemTemplate>                                                                   
                        <ItemStyle CssClass="ssCellSelected" />
                        <asp:Panel ID="priorityitems" runat="server" BorderColor="Aqua" BackColor="White" BorderWidth="1">
                        <asp:ListBox ID="lstPRIORITY" runat="server" SelectedItem='<%# Bind("PRIORITY") %>'>
                            <asp:ListItem>P1</asp:ListItem>
                            <asp:ListItem>P2</asp:ListItem>
                            <asp:ListItem>P3</asp:ListItem>
                        </asp:ListBox>
                        </asp:Panel>
                        <asp:TextBox ID="PRIORITY" runat="server" Width="35px" Text='<%# Eval("PRIORITY") %>' CssClass="ssTextBox"></asp:TextBox>
                        <cc1:DropDownExtender ID="PRIORITY_DropDownExtender" runat="server" 
                            Enabled="True" DropDownControlID="priorityitems" TargetControlID="PRIORITY">
                        </cc1:DropDownExtender>
                    </ItemTemplate> 
                    <ItemStyle CssClass="ssCell" />                   
                </asp:TemplateField>

以下是为每行创建onclick事件的代码。

    Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)

如果e.Row.RowType = DataControlRowType.DataRow那么             Dim lstPRI As ListBox = DirectCast(e.Row.Cells(3).FindControl(“lstPRIORITY”),ListBox)             Dim rowIndex As Integer = e.Row.RowIndex             Dim columIndex As Integer = 3             '列索引为0             如果lstPRI IsNot Nothing那么                 lstPRI.Attributes.Add(“onclick”,“setText(this.options [this.selectedIndex] .value,”&amp; rowIndex.ToString&amp;“,”&amp; columIndex.ToString&amp;“);”)             万一         结束如果

End Sub

我需要使用[this.selectedIndex] .Value并将其应用于ID为PRIORITY的TextBox

我需要以某种方式将其变成动态对手

<script type="text/javascript" language="javascript">
    function setText(newValue, row, column) {
        document.getElementById("ctl00_pagebody_GridView1_ctl02_PRIORITY").value = newValue;
    }
</script>

1 个答案:

答案 0 :(得分:0)

我能够使用Dom和Javascript工作。

这里找到了一个很好的教程...... http://www.opensourcetutorials.com/tutorials/Client-Side-Coding/JavaScript/javascript-document-object-model/page1.html

无论如何,我安装了IE DEV TOOLS,这样我就可以查看gridview的HTML并找出文本框的位置......

然后在aspx页面上的脚本函数中..

请注意,我必须选择gridview的第一个子节点,因为在表格内部是一个标签,然后包含整个表格结构。

我还必须在行整数中加1,因为第一行是gridview表的标题

<script type="text/javascript" language="javascript">
    function setText(newValue, therow, column) {
        var gridView = document.getElementById('<%= GridView1.ClientID %>').childNodes[0];
        var row = gridView.childNodes[parseInt(therow) + 1];
        var cell = row.cells[column];
        cell.childNodes[1].childNodes[0].value = newValue;
    }       
</script>