【问题标题】:Dynamically adding multiple controls to asp.net Panel, more than one Gridview not populating向asp.net面板动态添加多个控件,多个Gridview不填充
【发布时间】:2014-06-14 17:47:39
【问题描述】:

我正在生成动态gridviews 并使用Panel.Control.Add(<Gridviewname>) 将它们添加到Panel。在我的示例中,有 3 个 Gridviews 其中第二个显示内容,而其余两个没有填充。我调试了代码,发现所有Gridviews 都得到dataset 并成功绑定它们,但它们没有显示出来。我添加 Label 只是为了查看Panel 可能没有渲染多个Gridviews,所以它可能不会渲染 Label,但确实如此。

以下是代码:

private void DisplayData(DataSet _ds)
{
    if ((_ds != null) && (_ds.Tables.Count > 0))
    {
         if (_ds.Tables[0].Rows.Count > 0)
        {
            GridView DyGV_Element = new GridView();
            DyGV_Element.AutoGenerateColumns = false;
            DyGV_Element.DataSource = null;
            DyGV_Element.DataSource = _ds.Tables[0].DefaultView;
            DyGV_Element.DataBind();        
            pnl_DisplayContent.Controls.Add(DyGV_Element);
        } 

        if (_ds.Tables[1].Rows.Count > 0)
        {
            GridView DyGV_SubGroup = new GridView();
            DyGV_SubGroup.DataSource = null;
            DyGV_SubGroup.DataSource = _ds.Tables[1].DefaultView;
            DyGV_SubGroup.DataBind();
            pnl_DisplayContent.Controls.Add(DyGV_SubGroup);
        }

        if (_ds.Tables[3].Rows.Count > 0)
        {
            GridView DyGV_Comments = new GridView();
            DyGV_Comments.AutoGenerateColumns = false;
            DyGV_Comments.DataSource = null;
            DyGV_Comments.DataSource = _ds.Tables[3].DefaultView;
            DyGV_Comments.DataBind();
            pnl_DisplayContent.Controls.Add(DyGV_Comments);
        }

        Label lblTest = new Label();
        lblTest.Text = "Test content";

        pnl_DisplayContent.Controls.Add(lblTest);
    }
}

以下是 HTML 输出,显示所有网格视图都在渲染,但只有第二个显示数据和标签:

 <div id="ctl00_ContentPlaceHolder_Front_pnl_DisplayContent">

    <div>
    <table cellspacing="0" rules="all" border="1" style="border-collapse:collapse;">

    </table>
</div><div>
    <table cellspacing="0" rules="all" border="1" style="border-collapse:collapse;">
        <tr>
            <th scope="col">SubGroup</th>
        </tr><tr>
            <td>(T1) Technology Convergence and Alignment (test) (40%)</td>
        </tr>
    </table>
</div><div>
    <table cellspacing="0" rules="all" border="1" style="border-collapse:collapse;">

    </table>
</div><span>Test content</span>

谁能告诉我这里发生了什么?为什么 Gridview 不显示填充数据的位置?

编辑: 通过将 AutoGenerateColumns 设置为 true 来解决。第二个网格具有此属性,因为未明确提及其余网格将此属性设置为 false,因为它没有显示数据。我发布这个问题是多么愚蠢,它简单明了,但并没有打动我。

感谢 Daniel 和 Avneesh 的投入,非常感谢。

【问题讨论】:

  • 一种可能更好的方法是将数据集绑定到中继器。在 ItemDatabound 上,将表格绑定到项目模板中的 gridview...
  • +1 建议使用中继器,这在这种情况下绝对是更好的方法。

标签: c# asp.net gridview panel


【解决方案1】:

原因是 AutoGenerateColumns = false 在其余两个网格上。 试过这个例子:

 void Page_PreRender(object sender, EventArgs e)
    {
        DataSet dataSet = Data.fetchDataSet();
        GridView DyGV_Element = new GridView();
        DyGV_Element.AutoGenerateColumns = false;
        DyGV_Element.DataSource = dataSet.Tables[0].DefaultView;
        DyGV_Element.DataBind();

        GridView DyGV_SubGroup = new GridView();
        DyGV_SubGroup.DataSource = dataSet.Tables[1].DefaultView;
        DyGV_SubGroup.DataBind();

        GridView DyGV_Comments = new GridView();
        DyGV_Comments.AutoGenerateColumns = false;
        DyGV_Comments.DataSource = dataSet.Tables[2].DefaultView;
        DyGV_Comments.DataBind();

        Panel1.Controls.Add(DyGV_Element);
        Panel1.Controls.Add(DyGV_SubGroup);
        Panel1.Controls.Add(DyGV_Comments);
    }

现在我只能看到第二个网格,但如果我删除或设置 AutoGenerateColumns= true,那么我会看到所有网格。 看起来像一些错误,但在 GridView 源代码中我可以看到以下内容:

 if (AutoGenerateColumns == true) {
            if (ColumnsGeneratorInternal is GridViewColumnsGenerator) {
                ((GridViewColumnsGenerator)ColumnsGeneratorInternal).DataItem = dataSource;
                ((GridViewColumnsGenerator)ColumnsGeneratorInternal).InDataBinding = useDataSource;
            }

            fieldsArray.AddRange(ColumnsGeneratorInternal.GenerateFields(this));
        }

所以你必须设置 AutoGenerateColumns 来绑定数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 2010-09-19
    • 2011-12-10
    相关资源
    最近更新 更多