【发布时间】: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 建议使用中继器,这在这种情况下绝对是更好的方法。