就是DataGrid某些列内容太长,想让它只显示部分内容,然后用tip显示。另外还需要可编辑这些列。
也在网上查了一些资料,方法大概有以下:
1、使用模版列方法
用ToolTip属性   
  <asp:Label   runat="server"   ToolTip='<%#   DataBinder.Eval(Container.DataItem,   "Content").ToString()   %>'   Text='<%#   LeftStr(DataBinder.Eval(Container.DataItem,   "Content").ToString(),20)   %>'   ID="Label2">   
  </asp:Label>   
    
  public   string   LeftStr(string   InStr,Int   Length)   
  {   
          if(InStr.Length>Length)   
                  InStr=InStr.substring(InStr,Length)+"...";   
          return   InStr;   
  }这种方法可以,但是产生了一个新的问题。就是模版列使用datagrid编辑的功能,label是无法编辑的。如果使用textBox
界面太丑。3、在DataGrid属性-->列-->   
  在数据格式设置表达式中输入   
  <DIV   style='overflow:   hidden;width:   100px;'><noBR>{0}</noBR></DIV>   
  这样列不会被撑破,字符也完整~这种方法也可以,但编辑时,tooltip显示时内容会被加上 <DIV   style='overflow:   hidden;width:   100px;'><noBR>{0}</noBR></DIV>  这部分内容,保存时也不好处理。3、使用css方法
<html>   
  <head>   
  ...   
  <style   type="text/css">   
  .hidden   {overflow:   hidden;}   
  </style>   
  </head>   
  <body>   
  <asp:DataGrid....>   
  ...   
  <ItemStyle   CssClass="hidden"></ItemStyle>   
  ...   
  </asp:DataGrid>   
  </body>   
  </html>我各人认为第三种这种方法可行的,但是一直没有实验成功。
有没有高手指点一下,如何处理。谢谢!

解决方案 »

  1.   


    在GridView1_RowDataBound事件中Label label = (HyperLink)e.Row.FindControl("label1");//要缩略显示的单元格中的控件
    label.Text = SubStr(hl.Text, 4);//获取字符,调用截取方法,以保留前4个字为例子
    label.ToolTip = DataBinder.Eval(e.Row.DataItem, "绑定的字段").ToString();
    //鼠标移动上去显示全称//截取字符,进行判断.
       public string SubStr(string sString, int nLeng)
        {
            if (sString.Length <= nLeng)
            {
                return sString;
            }
            string sNewStr = sString.Substring(0, nLeng);
            sNewStr = sNewStr + "...";
            return sNewStr;
        }
    有些事情还是想简单一些比较好.
      

  2.   

    第三种方法,把css样式定义一个宽度,再使用overflow:hidden
      

  3.   


    应该更正一下,是DataGrid的RowDataBound事件,DataGrid有这个事件吗、?
      

  4.   

    能具体点不,对css不是很熟。
    把css样式定义一个宽度  --这个是给什么定义一个宽度?
      

  5.   

    <asp:Label  ID="Label2" runat="server" Text=' <%# DataBinder.Eval(Container.DataItem,  "Content").ToString().Length > 20 ? DataBinder.Eval(Container.DataItem,  "Content").ToString().Substring(0,20) + "..." : DataBinder.Eval(Container.DataItem,  "Content").ToString() %>'>
    </asp:Label>  
      

  6.   

    俺给你个方法:
        /// <summary>
        /// 截取字符串
        /// </summary>
        /// <param name="obj">截取的对象</param>
        /// <param name="i">截取的长度</param>
        /// <returns>返回截取对象+</returns>
        public static string SubString(object obj, int i)
        {
            string str = obj.ToString();
            if (str.Length > i)
            {
                return str = str.Substring(0, i) + "...";
            }
            else
            {
                return str;
            }
        }  
    <asp:DataList ID="DataList5" runat="server">
                                                                        <ItemTemplate>
                                                                            <img src="../images/web/default/bit.jpg" style="float: left; margin: 6px" />
                                                                            <a href='ArticleList.aspx?fk_dictionary=10&id=<%# Eval("PKID") %>'>
                                                                                <%# SubString(Eval("Name"),10) %></a>
                                                                        </ItemTemplate>
                                                                    </asp:DataList>杨永强个人站点http://www.developceo.cn/