如何从Gridview内的EditItemTemplate获取ID

时间:2016-07-18 19:27:41

标签: c# asp.net gridview

我有一个WebForms GridView,我想根据另一个DropDownList中的值,有条件地更新BoundField(或者我使用DropDown中的值或使用Textbox中的文本)。

<asp:GridView ID="gv_results" runat="server" DataKeyNames="ID_RESULTS" DataSourceID="get_results">
            <Columns>
              <asp:TemplateField HeaderText="DETAIL" SortExpression="DETAIL">
                    <EditItemTemplate>
                        <asp:TextBox ID="tb_detail_edit" runat="server"></asp:TextBox>
                        <asp:DropDownList ID="dd_detail_edit" runat="server" AutoPostBack="True" DataSourceID="get_detail" DataTextField="DETAIL" DataValueField="DETAIL" ></asp:DropDownList>
                        </asp:SqlDataSource>
                    </EditItemTemplate>
                    <ItemTemplate>

        <asp:SqlDataSource runat="server" ID="get_results" 
            UpdateCommand="UPDATE RESULTS SET [DETAIL] = COALESCE(@DETAIL,@DETAILwelcome)">
            <UpdateParameters>
                <asp:ControlParameter ControlID="ctl00$MainContent$gv_results$ctl02$dd_detail_edit" PropertyName="SelectedValue" Name="DETAIL" Type="String"></asp:ControlParameter>
                <asp:ControlParameter ControlID="ctl00$MainContent$gv_results$ctl02$tb_detail_edit" PropertyName="Text"  Name="DETAILwelcome" Type="String"></asp:ControlParameter>
            </UpdateParameters>
        </asp:SqlDataSource>

好吧,我在google中发现我必须在控制参数中使用Direct ID。它的工作原理是......在dd_detail_edit的id之前的$ ctl02(例如)在Gridview中使用不同的行进行更改(因此这个id适用于一行,但也许对于下一行它不会工作

是否有一些解决方法?

只使用$ gv_results $ dd_detail_edit这样的东西不行,我不知道为什么:S

TIA和最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

首先,看起来你有一个开放的<ItemTemplate>标签而没有任何关闭标签。

如果您查看.net documentation,则可以看到他们使用常规控件ID的位置,例如ControlID = dd_detail_edit

我认为你没有提供足够的细节来提供完整的答案,但这些是我注意到的一些事情。