如何动态设置GridView 列宽

本文介绍如何在ASP.NET中通过编程方式动态调整GridView控件中列的宽度。具体包括默认行为、通过设置Width属性静态调整宽度的方法,以及如何根据列内容动态调整宽度的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

默认情况下,会自动调整 GridView 控件中列的大小。列将呈现为不含宽度信息的 HTML 表单元格(td 元素);大多数浏览器都会调整表单元格的大小以适应列中最宽的内容。

如果需要,您可以通过编程方式设置 GridView 控件中个别列的宽度。如果列的宽度取决于只在运行时提供的信息,则这种方式非常有用。例如,您可能要根据列的内容(即根据 GridView 控件绑定到的数据)调整列的大小。

设置列宽的基本方法包括设置列模板的 Width 属性。如果希望根据列的内容设置宽度,可以处理 RowDataBound 事件。这使得您可以检查行中的数据。

动态设置列宽
  • 在代码中,将 GridView 控件列的 ItemStyle 属性的 Width 属性设置为所需的宽度。

    下面的代码示例说明如何将 GridView1 控件中所有列的宽度设置为用户在文本框中输入的值。

  • protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
          int colWidth = Int16.Parse(Server.HtmlEncode(TextBox1.Text));
          if (colWidth > 0)
          {
            for (int i = 0; i < GridView1.Columns.Count; i++)
            {
              GridView1.Columns[i].ItemStyle.Width = colWidth;
            }

          }
        }
        catch
        {
          // Report error.     
        }
    }

  • 根据数据内容设置列宽
    1. 创建 RowDataBound 事件的处理程序。

      每次在网格中的新行绑定数据时,都会引发 RowDataBound 事件,而且该事件将授予您对每行中数据的访问权限。

    2. 在事件处理程序中,执行下列操作:

      1. 创建 DataRowView 对象并为其分配当前网格行的 DataItem 值。

        DataItem 属性将被类型化为一个对象。因此,您必须强制转换该属性。

      2. 测试数据行 (DataControlRowType) 以确保您使用的是数据绑定行而不是页眉或页脚。

      3. DataRowView 对象提取要检查的数据值。

      4. 设置 ItemStyle 属性的 Width 属性。

      5. ItemStyle 属性的 Wrap 属性设置为 false

        如果 Wrap 属性为 false,则会自动调整列的大小。

      下面的代码示例说明在设置某一列(在本例中为第三列)的宽度时如何根据上一列中最宽数据元素的宽度进行设置。将为 GridView 控件所显示的每个数据行调用一次 RowDataBound 事件处理程序。这段代码将最宽元素的字符数存储在受保护的页成员中,并将列的宽度设置为字符数乘以 30(任意乘数)。

protected int widestData;
protected void GridView1_RowDataBound(object sender,
    GridViewRowEventArgs e)
{
    System.Data.DataRowView drv;
    drv = (System.Data.DataRowView)e.Row.DataItem;
   if (e.Row.RowType == DataControlRowType.DataRow)
    {
      if (drv != null)
      {
        String catName = drv[1].ToString();
        Response.Write(catName + "/");
        int catNameLen = catName.Length;
        if (catNameLen > widestData)
        {
          widestData = catNameLen;
          GridView1.Columns[2].ItemStyle.Width =
            widestData * 30;
          GridView1.Columns[2].ItemStyle.Wrap = false;
        }
      }
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    widestData = 0;
}

转载于:https://www.cnblogs.com/earlybirdmin/archive/2009/04/10/1433307.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值