Asp.net 无法访问Gridview内EditItemTemplate中的DropdownList

Asp.net 无法访问Gridview内EditItemTemplate中的DropdownList,asp.net,gridview,drop-down-menu,itemtemplate,edititemtemplate,Asp.net,Gridview,Drop Down Menu,Itemtemplate,Edititemtemplate,我的TT.aspx: <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" AutoGenerateEditButton="true" OnRowEditing="GridView1_RowEditing" > <Columns> <asp:TemplateField> &

我的TT.aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" AutoGenerateEditButton="true" OnRowEditing="GridView1_RowEditing" >
    <Columns>
        <asp:TemplateField>
        <ItemTemplate>
            <asp:Literal ID="lit1" Text='<%#Eval("E_Name")%>' runat="server">

            </asp:Literal>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:DropDownList ID="Eq" AppendDataBoundItems="true" runat="server" DataSourceID="SqlDataSource2" DataTextField="Name" DataValueField="Name">

            </asp:DropDownList>

        </EditItemTemplate>

        </asp:TemplateField>

    </Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [E_Name], [Problem], [Solution] FROM [Equipment] WHERE ([O_ID] = @O_ID)">
    <SelectParameters>
        <asp:QueryStringParameter Name="O_ID" QueryStringField="TT" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>

    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT [Name] FROM [Parts]">
</asp:SqlDataSource>
我是asp.net的新手,我只使用这段代码进行测试。我遇到的问题是,第二个
FindControl(“Eq”)
总是返回
null
,而第一个(用于文本)返回正确的值。我尝试将gridview的编辑索引设置为e.NewEditIndex,但似乎不起作用

基本上,我想做的是,如果用户单击一行上的Edit,标签中的原始数据绑定值将在dropdownlist中被选中


有人能给我介绍一下吗?

行编辑事件只给出正在编辑的行索引。您需要将编辑行索引设置为网格并重新绑定它。如果需要在
EditItemTemplate
内设置值或绑定控件,则必须在
RowDateBound
事件中执行,因为您将在
rowdediting
事件中重新绑定网格,因此
RowDataBound
事件也将为您提供
EditItemTemplate
的控件

如中所示


检查这个我在问之前已经检查过了,但是我不知道它是怎么联系的。我这样说是因为他在
RowDataBound
方法中实现代码,而我在
rowdediting
方法中实现代码。而且我已经尝试了
GridView1.EditIndex=e.NewEditIndex但它不起作用。如果我错了,请纠正我。+1但如果使用DataSource属性和DataBind方法手动绑定GridView,则只需设置EditIndex。这个答案可以在没有行编辑事件重新绑定GridView的情况下使用;单击编辑按钮是否会调用
RowDataBound
方法?如果没有,那么如何从
行编辑
方法以编程方式调用它?按下编辑按钮将调用
行编辑
事件,重新绑定网格时将触发行内编辑事件
行日期绑定
事件,正如@Sean所指出的,您正在使用
DataSource
属性,因此您不需要重新绑定网格,只需设置
EditIndex
行数据绑定将自动启动返回null。这是从
RowDataBound
方法中引用“lit1”的正确方法吗?我管理了一个解决方案,有点混乱,但完成了工作。我将标签内的文本保存在一个全局变量中,在
行编辑
方法中读取文本,然后在
行数据绑定
方法中读取文本
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        Literal xx = (Literal)GridView1.Rows[e.NewEditIndex].FindControl("lit1");
        String x =  xx.Text;
        DropDownList x1 = (DropDownList)GridView1.Rows[e.NewEditIndex].FindControl("Eq");
        x1.SelectedValue = x;
    }
protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
  // grid view's edit index has been changed so rebind it
  gv.EditIndex = e.NewEditIndex;
}

protected void gv_RowDataBound(object sender, GridViewEditEventArgs e)
{
 if (e.Row.RowType == DataControlRowType.DataRow)
  {
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
          ddList.SelectedValue = "set your value here";
        }
   }
}