[英]ASP.net/C# newbie looking for help editing column width dynamically when data is retrieved
我一直在搞这个,还没有找到一个干净的解决方案。 目前,我在aspx页面上有一个asp: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 = longestField;
该解决方案的问题在于,DataBind()似乎尚未发生,并且我得到了一些类似于异常的空指针。 之后我可以做,但是我怎么知道什么时候完成呢? 即使发生像AfterDataBind这样的事件,我也不想使用它,因为如果我必须确定在该特定函数中要处理的表。
解决方案2:创建我自己的databind方法并改用它
这种解决方案的问题是我似乎无法自己向tableData添加行(我希望有诸如tableData.NewRow()函数之类的东西,但我似乎找不到适合自己需求的东西。
我也尝试过使用OnDataItemBound函数,但是我意识到我已经知道如何将DataGridItemEventArgs e与datagrid的列集合相关联。
我将不胜感激。 在此先感谢大家。
计算列宽是一项棘手的工作,并且容易出现故障。 我建议为数据量有限的列设置固定宽度,并让网格为其他列使用百分比宽度。
例如,假设您有一个地址列表。
如果您对计算列宽不满意,请看一下这篇文章:
http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx#q877q
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.