【问题标题】:Dynamically changing properties in a BoundField from the Code Behind从后面的代码动态更改 BoundField 中的属性
【发布时间】:2015-10-17 08:56:42
【问题描述】:

我有一个 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>

描述字段中的文本可以是任意长度,所以现在我将列设置为 300 像素宽,并在必要时换行。

但我想实现的是自动设置宽度的位置,就像在普通的 BoundField 直到它达到 300px 的宽度。在那之后,我希望它环绕。

我想在 DataBound 事件期间尝试实现这一点,我可以在其中查看添加到表中的每个字符串的长度。如果达到一定长度,我会将 ItemStyle-Width 属性添加到 BoundField。

问题是 BoundFields 没有给出 ID,所以我不能在后面的代码中以正常的方式更改属性。我认为可以通过 GridView 的 ID 获取这些属性,但我不确定在哪里添加属性。

【问题讨论】:

  • 我觉得用 CSS 管理比较好。
  • @CurseStacker,我将如何为那个 BoundField 提供正确的 CSS 类或样式标记?同样,我无法通过 ID 访问它。也许我可以给它一个自定义类,并从我后面的代码中更改样式表上的内容?简单浏览一下 google 后,我认为我无法从后面的代码中编辑样式表。

标签: asp.net


【解决方案1】:

我想通了。

我最终使用文本的字体和大小来测量字符串的宽度。

我发现了一个特别有用的链接here。辅助类使生成SizeF 对象变得容易。我用width: 300px 制作了一个自定义 CSS 类,名为 width300px。

这是我的代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2021-01-17
    • 2020-09-27
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多