从代码隐藏

时间:2015-10-16 00:21:33

标签: asp.net

我有一个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可以获得这些属性,但我不知道在哪里添加属性。

1 个答案:

答案 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,如果我在它之前添加更多列,我将不得不记得更改列索引,但这可行。