我有一个asp.net GridView,里面有几个BoundFields。
<asp:BoundField ReadOnly="True" HeaderText="ID" DataField="ID" SortExpression="ID"></asp:BoundField>
<asp:BoundField ReadOnly="True" HeaderText="Description" DataField="description" ItemStyle-Wrap="true" ItemStyle-Width="300px" SortExpression="ID"></asp:BoundField>
描述字段中的文本可以是任意长度,因此现在我将列设置为300px宽,并在必要时包装文本。
但是我想要实现的是自动设置宽度的位置,就像在正常的BoundField 中直到它达到宽度的300px一样。在那之后,我希望它能够包裹起来。
我想在DataBound事件期间尝试实现它,在那里我可以查看添加到表中的每个字符串的长度。如果它达到一定长度,我将ItemStyle-Width属性添加到BoundField。
问题是BoundFields没有给出ID,所以我无法正常改变后面代码中的属性。我认为通过浏览GridView的ID可以获得这些属性,但我不知道在哪里添加属性。
答案 0 :(得分:2)
我明白了。
我最终使用文字的字体和大小来测量字符串的宽度。
我找到了一个特别有用的链接here。帮助程序类使生成SizeF
对象变得容易。我创建了一个名为width300px的width: 300px
自定义CSS类。
这是我背后的代码:
protected void myGridViewRowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Font stringFont = new Font("Times New Roman", 12);
SizeF stringSize = new SizeF();
string description = e.Row.Cells[1].Text;
stringSize = GraphicsHelper.MeasureString(description, stringFont);
if (stringSize.Width > 300)
{
gridViewWallsList.Columns[2].ItemStyle.CssClass = "width300px";
}
}
}
最重要的部分是获取列的ItemStyle
属性。没有ID,如果我在它之前添加更多列,我将不得不记得更改列索引,但这可行。