【发布时间】:2011-11-26 23:23:20
【问题描述】:
我一直在搞砸这个问题,但还没有找到一个干净的解决方案。目前,我在 aspx 页面上有一个 asp:DataGrid 控件(我愿意更改它)。当我单击一个按钮时,我会从数据库中检索一个 DataSet 并使用该 DataSet 中的一个 DataTable 来填充我的 DataGrid。
如果我的 asp:DataGrid 被命名为“tableData”并且我的 DataSet 被命名为 data,那么以下实现将成功填充我的网格:
protected void renderData(object sender, EventArgs e)
{
DataSet data = hc.getDataSet();
tableData.DataSource = data.Tables[0];
tableData.DataBind();
}
但是我的列宽没有我们想要的那么宽。我想查看 data.Tables[0] 每一列中的所有数据,并相应地选择我的 tableData 列的宽度。
我尝试了很多方法来实现这一点,但都失败了,但这是我的两个主要想法和我遇到的问题:
解决方案 1:在 DataBind() 之后更改列宽。我会按照
的行使用某种类型的代码tableData.Columns[i].ItemStyle.Width = 最长字段;
这个解决方案的问题是 DataBind() 似乎还没有发生,我得到了一些像异常这样的空指针。之后我可以做,但我怎么知道什么时候做呢?即使有像 AfterDataBind 这样的事件,我也不想使用它,因为如果我必须确定在该特定函数中处理的是哪个表。
解决方案 2:创建我自己的数据绑定方法并改用它
这个解决方案的问题是我自己似乎无法向 tableData 添加行(我希望有一个类似于 tableData.NewRow() 的函数,但我似乎找不到适合我需要的函数。
我也尝试过使用 OnDataItemBound 函数,但我意识到我知道如何将 DataGridItemEventArgs e 关联回 datagrid 的列集合。
我将不胜感激。在此先感谢各位。
【问题讨论】:
-
我们可以看看你的标记吗?您是否在 DataGrid 上设置了宽度?此外,使用 GridView 控件可能会更好。我相信这用 .NET 2.0 msdn.microsoft.com/en-us/library/aa479339.aspx 取代了 DataGrid