C# 网格视图下拉列表数据绑定错误

C# 网格视图下拉列表数据绑定错误,c#,asp.net,c#-4.0,data-binding,gridview,C#,Asp.net,C# 4.0,Data Binding,Gridview,我使用下面的代码绑定另一个表中的下拉数据。并使用rowindex引用该控件名。但它总是返回null。并且还返回错误消息 `Object reference not set to an instance of an object.` 我使用two方法,但两者都返回控件名null 第一个代码: protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Ro

我使用下面的代码绑定另一个表中的下拉数据。并使用rowindex引用该控件名。但它总是返回null。并且还返回错误消息

  `Object reference not set to an instance of an object.` 
我使用two方法,但两者都返回控件名null

第一个代码:

 protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            Control ctrl = e.Row.FindControl("DDL_STATUS_FT"); //It always return null
            if (ctrl != null)
            {
                DropDownList dd = ctrl as DropDownList;
                DataSet7TableAdapters.sp_getall_trv_masterTableAdapter TA = new DataSet7TableAdapters.sp_getall_trv_masterTableAdapter();
                DataSet7.sp_getall_trv_masterDataTable DS = TA.GetData();
                dd.DataTextField = "fld_TName";
                dd.DataValueField = "fld_id";
                dd.DataSource = DS;
                dd.DataBind();
            }

        }

    } 
第二:

 In databind function



if (DS.Rows.Count > 0)
    {
        GridView2.DataSource = DS;
        GridView2.DataBind();

    foreach (GridViewRow grdRow in GridView2.Rows)
    {
        DataSet7TableAdapters.sp_getall_trv_masterTableAdapter TA1 = new DataSet7TableAdapters.sp_getall_trv_masterTableAdapter();
        DataSet7.sp_getall_trv_masterDataTable DS1 = TA1.GetData();
        // Nested DropDownList Control reference is passed to the DrdList object. This will allow you access the properties of dropdownlist placed inside the GridView Template column.  
        DropDownList drdList = (DropDownList)(GridView2.Rows[grdRow.RowIndex].Cells[4].FindControl("DDL_STATUS_FT"));//It always return null

        // DataBinding of nested DropDownList Control for each row of GridView Control.  
        drdList.DataSource = DS1;
        drdList.DataValueField = "fld_id";
        drdList.DataTextField = "fld_TName";
        drdList.DataBind();
    } 
}
请帮我做这件事

   <asp:TemplateField ItemStyle-Width="100px" HeaderText="TYPE">
                        <ItemTemplate>
                            <asp:DropDownList ID="DDL_STATUS" runat="server" AutoPostBack="true" Enabled="false" >
                            </asp:DropDownList>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID="DDL_edit_STATUS" runat="server" AutoPostBack="true" SelectedValue='<%# Eval("fld_Type") %>'>
                            </asp:DropDownList>
                        </EditItemTemplate>
                        <FooterTemplate>
                            <asp:DropDownList ID="DDL_STATUS_FT" runat="server" AutoPostBack="true">
                            </asp:DropDownList>
                        </FooterTemplate>
                    </asp:TemplateField>

EDITED2

在gridview项目模板的aspx代码中必须有
dropdownlist

您正在使用
e.row.findcontrol
进行查找,但没有将其声明为空

因此,首先将dropdownlist添加到gridview中 这是您的下拉列表示例

   <asp:TemplateField ItemStyle-Width="30px" HeaderText="DDL_STATUS_FT">
                        <ItemTemplate>
                            <asp:Dropdownlist ID="DDL_STATUS_FT" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>

如果您得到null
ctrl
Control ctrl=e.Row.FindControl(“DDL_STATUS_FT”)//它总是返回null


然后确保在您的aspx代码中
DDL\u STATUS\u FT
控件是
runat=“server”

尝试按单元格和单元格索引查找控件,如

Control ctrl = e.Row.Cells[yourCellIndex].FindControl("DDL_STATUS_FT");
下拉列表“DDL_STATUS_FT”位于
页脚模板中。您必须按如下方式进行检查

if(e.Row.RowType == DataControlRowType.Footer)
{
  DropDownList ctrl =(DropDownList)e.Row.Cells[CellIndex].FindControl("DDL_STATUS_FT"); 
}

DS不是数据集,它是datatableif(ctrl!=null)值始终返回空值,但我的下拉id存在于GridView中aspx code
DDL_STATUS\u FT
中的下拉列表在哪里?它工作正常。但我有一个疑问,我想在itemtemplate alsoDataControlRowType中添加此项。DataRow用于获取itemtemplate中的控件。您找不到“DDL_STATUS\u FT”如果您将RowType检查为Datarow…是,我会找到所有行的项目。但是我想包括gridview行编辑事件。。受保护的void EditGrade(对象发送方,GridViewEditEventArgs e){GridView2.EditIndex=e.NewEditIndex;BindData1();}//绑定数据部分出错。
private void BindData1(){DataSet7TableAdapters.sp_getall_trv_config_mastertableadapters TA=new DataSet7TableAdapters.sp_getall_trv_config_mastertableadapters();DataSet7.sp_getall_trv_config_masterDataTable DS=TA.GetData();if(DS.Rows.Count>0){GridView2.DataSource=DS;GridView2.DataBind()}
@romi…这个问题是关于对象引用错误的..我想现在已经解决了..如果您有任何进一步的问题或疑问,您可以要求他们创建新问题。评论区域不应用格式..因此很难理解您需要什么。而且如果您创建新问题,您将有机会获得完美的解决方案ons会更高,因为每个人都能看到它并帮助你解决。。。