【问题标题】:Grid view Dropdown list data binding error网格视图下拉列表数据绑定错误
【发布时间】:2012-09-16 15:30:03
【问题描述】:

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

  `Object reference not set to an instance of an object.` 

我使用这两种方法,但都返回控件名称为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>

【问题讨论】:

  • 您在 aspx 代码 DDL_STATUS_FT 中的下拉列表在哪里?

标签: c# asp.net c#-4.0 data-binding gridview


【解决方案1】:

DropDown "DDL_STATUS_FT" 在Footer Template..你必须检查它如下..

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

【讨论】:

  • 它工作正常..但我有一个疑问,我也想在 itemtemplate 中添加它
  • DataControlRowType.DataRow 用于获取 ItemTemplate 中的控件。如果您将 RowType 检查为 Datarow,则找不到“DDL_STATUS_FT”...
  • 是的,我找到了所有行的项目。但我想包括 gridview 行编辑事件.. protected void EditGrade(object sender, GridViewEditEventArgs e) { GridView2.EditIndex = e.NewEditIndex;绑定数据1(); } //绑定数据节出错。
  • private void BindData1() { DataSet7TableAdapters.sp_getall_trv_config_masterTableAdapter TA = new DataSet7TableAdapters.sp_getall_trv_config_masterTableAdapter(); DataSet7.sp_getall_trv_config_masterDataTable DS = TA.GetData(); if (DS.Rows.Count &gt; 0) { GridView2.DataSource = DS; GridView2.DataBind(); }}
  • @romi...这个问题是关于对象引用错误的。我认为它现在已经解决了...如果您有任何进一步的问题或疑问,您可以问他们创建新的 Questions.Formatting不适用于评论区..所以很难理解你需要什么。而且如果你提出新问题,你得到完美解决方案的机会会更高,因为每个人都能看到它并帮助你......
【解决方案2】:

尝试通过 cell 和 cellIndex 找到您的控件...

Control ctrl = e.Row.Cells[yourCellIndex].FindControl("DDL_STATUS_FT");

【讨论】:

    【解决方案3】:

    EDITED2

    你必须在 gridview item-template 的 aspx 代码中有dropdownlist

    你发现使用 e.row.findcontrol 却没有如此滥用地声明它返回 null

    所以,首先将下拉列表添加到您的网格视图中 这是您的下拉列表的示例

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

    如果你得到 null ctrl 控制 ctrl = e.Row.FindControl("DDL_STATUS_FT"); //它总是返回null

    然后确保在您的 aspx 代码中 DDL_STATUS_FT 控件是 runat="server"

    【讨论】:

    • DS 不是数据集,它是一个数据表
    • if (ctrl != null) 值总是返回空值
    • 但我的下拉 ID 出现在 gridview 中
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多