例如这样的场景: 其中一列的数据宽度是90px 左右, 所以列宽设为90px, 但是表头有八个字, 如果让它自动折行, 可能会第一行五个字, 第二行三个字, 很难看, 以前用datagrid 可以在第四个字后面加<br> 让它分两行, 可是gridview 似乎不支持这样做, 写上<br> 它就照原样显示了. 模板列我知道可以用模板控制, 想问一下绑定列怎么才能控制表头换行? 
谢谢

解决方案 »

  1.   

    哇  换行好难看的。不如查询的时候把字段substring()一下。 在加...
      

  2.   

    回二楼:
    老大, 这是不可能的... 我只是举这么例子, 大多数情况下, 不可能调到自己希望的宽度, 因为列宽取决于数据宽. 
    回三楼:
    <asp:BoundField HeaderText="一二三四五" HeaderStyle-Width="100px" DataField="test" ItemStyle-Wrap="false" />
    回四楼:
    如果你的数据只有一个数字, 而表头长达十个字, 而且这样的列有四五列,  你觉得换行难看, 还是不换行难看? 
      

  3.   

    仍可以用<br>, 测试没有错误.
    <asp:BoundField HeaderText="一二<br/>三四五"/>
      

  4.   

    xie_yanke:
    你用的是BoundField 吗? TemplateField 可以, 但是BoundField 我这边不行啊, 或者你把整个测试项目的文件发给我, [email protected] 谢谢. 
      

  5.   

    呵呵,是可以的.我测试过了.
    <asp:GridView ID="gridList" runat="server">
    <Columns>
        <asp:BoundField HeaderText="a<br/>b" />
    </Columns>
    </asp:GridView>如果你的不可以,那么你也可以这样:private void gridList_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
    {
      if(e.Row.RowType==DataControlRowType.Header)
      {
          e.Row.Cells[0].Text = "a<br/>b";
      }
    }
      

  6.   

    TO xie_yanke :
    在RowDataBound 事件中我无论如何也不可能接受... 没效率可言了
    gridview 定义的地方的代码我当然也是知道怎么写的, 我现在怀疑你的环境配置可能和我的不一样, 导致不一样的结果, 例如web.config 或是其它的因素影响, 所以我想让你把整个项目发给我看一下.  另外, 我是用vs2008, 如果你用的是vs2005, 可能跟.net framework 的版本也有关系. 所以..还是麻烦你发一下吧, 谢谢. 
      

  7.   

    VS2008不太熟, 是不能使用<br/>, 但是, VS2008新增了HeaderRow, 可以在你绑定数据时, 进行格式化:<script runat="server">
        private void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ArrayList al = new ArrayList();
                al.Add("a");
                al.Add("a");
                al.Add("a");
                al.Add("a");
                s.DataSource = al;
                s.DataBind();            foreach (TableCell o in s.HeaderRow.Cells)
                {
                    o.Text = string.Format(o.Text, "<br/>");
                }
            }
        }
    </script>
    .....
    <asp:GridView ID="s" runat="server">
        <Columns>
            <asp:BoundField HeaderText="a{0}b" />
        </Columns>
    </asp:GridView>
    .....
      

  8.   

    to xie_yanke :
    十分感谢!
    但是这个方法也让人很难满意, 首先, 即使只在page_load 里面做一次, 就很烦, 因为每个页面都需要把这几句拷过去, 感觉很累赘, 更何况, 一个页面不止需要做一次, 只要重新绑定数据, 就需要再做一遍, 只为实现这么点小功能. -_-##
      

  9.   

    呵呵,我对vs2008不太熟. 如果你认为你这个在大量的页面要用.如果没有更好的办法, 你可以做自定义控件.
    public class myGridView : GridView
    .....所有都不变, 只把HeaderRow 格式化一下,即可.
      

  10.   

    做自定义控件的话,又要在每个页面加Register 指令了, .... 唉, 真烦, 
    我再等等吧, 实在没有别的办法的话就结贴了. 
      

  11.   

    你可以在WebConfig里加啊.<pages>
       <controls>
          <add .... />
       <controls>
    </pages>所有页面均可调用.
      

  12.   

    我的页面是从母版页继承的, 所以我希望能在母版页里处理掉, 下面两个函数是母版的, 
    虽然编译通过, 可惜不会执行gv1_DataBound, 有没有办法让母版页函数处理内容页的控件的事件? 
        protected void Page_Load(object sender, EventArgs e)
        {
            var gv1 = ContentPlaceHolder1.FindControl("gv1") as System.Web.UI.WebControls.GridView;
            if (gv1 == null)
                return;        gv1.DataBound += new EventHandler(gv1_DataBound);    }    void gv1_DataBound(object sender, EventArgs e)
        {
            var gv1=sender as GridView;
            foreach (TableCell cell in gv1.HeaderRow.Cells)
            {
                cell.Text = string.Format(cell.Text, "<br />");
            }
        }
      

  13.   

    有了一个暂时的解决方案, 母版页中:     public void Page_PreRender(object sender, EventArgs e)
        {        
            var gv1 = ContentPlaceHolder1.FindControl("gv1") as System.Web.UI.WebControls.GridView;
            if (gv1 == null)
                return;        foreach (TableCell cell in gv1.HeaderRow.Cells)
            {
                cell.Text = string.Format(cell.Text, "<br />");
            }
        }
    限制是控件必须命名为"gv1" , 不过这对我现在的情况来说不是个限制, 我本来就每个页面都起一样的名字, 
    缺点是每次回发都执行一次, 效率不好.
    期待更好的解决方案...
      

  14.   

     <asp:BoundField DataField="xh" HeaderText="序<br/>号"   HtmlEncode="false"/>
    我这个实现了
      

  15.   

    需要把HtmlEncode属性设置为false,<br/>就不会在后台解析,然后在客户端展现换行的效果
      

  16.   

    <asp:BoundField DataField="xh" HeaderText="序<br/>号" HtmlEncode="false"/>
    这个换行行之间的间隔好大啊,有点难看,不知道有没有好看点的方法呢?