///<summary>
/// 多余的字用...显示
///</summary>
///<param name="GridView1"></param>
///<param name="title">要缩略显示的数据列名称</param>
///<param name="cell">位于gridView表格的列</param>
///<param name="pageNum">一页中要显示的数据项个数</param>
///<param name="len">字符长度</param>
public static void viewStr(GridView GridView1,DataTable dt, string title,int cell,int pageNum,int len)
{
if (GridView1.Rows.Count-1 > 0)
{
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
DataRowView row;
string str = "";
if (GridView1.PageIndex == 0)
{
row = dt.DefaultView[i];
str = Convert.ToString(row[title]);
GridView1.Rows[i].Cells[cell].Text = subStr(str, len);
}
else
{
row = dt.DefaultView[i + pageNum * GridView1.PageIndex];
str = Convert.ToString(row[title]);
GridView1.Rows[i].Cells[cell].Text = subStr(str, len);

}
}
}
}
private static string subStr(string str, int leng)
{
if (str.Length <= leng)
{
return str;
}
string sNewStr = str.Substring(0, leng);
sNewStr = sNewStr + "...";
return sNewStr;
}

 

GridView 长文本显示省略号
概述:1.gridview某列文本长度超过某值显示省略号

           2.但鼠标移动到该列单元格时弹出div层,显示全部信息

其实网上有很类似到资料,不过没有看见完整的,容易用的,所以也小费了点力气!

1. gridview某列文本长度超过某值显示省略号

   主要说利用服务器端绑定数据时做字符串处理,过长到显示“......”省略号。同时完整信息存放在一个隐藏到div中,为2步做准备。

绑定的处理代码(详细看下面到例子)

 view plaincopy to clipboardprint?
<%# Eval("ProductName").ToString().Length > 10 ? Eval("ProductName").ToString().Substring(0,10) + "..." : Eval("ProductName").ToString() %>  
<%# Eval("ProductName").ToString().Length > 10 ? Eval("ProductName").ToString().Substring(0,10) + "..." : Eval("ProductName").ToString() %>

 其中ProductName 是绑定到数据库表到列名。

注意:必须用Eval绑定,用Bind绑定数据会出现错误,绑定数据最好用模板列,这样在模板列中插入lable标签来显示数据,因为lable标签有tootip属性,可以用它来显示完整的内容,而本身的text属性绑定带“...”的内容

例子:

                            <asp:TemplateField HeaderText="文件编号">
                                <HeaderTemplate>
                                    文件编号<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/images/PageImage/arrow_up.gif" CommandName="X" CommandArgument="FileNumber" />
                                </HeaderTemplate>
                                <ItemTemplate>
                                    <asp:Label ID="Label1" runat="server" ToolTip='<%# Bind("FileNumber") %>' Text='<%# Bind("FileNumber") %>'></asp:Label>
                                </ItemTemplate>
                                <ItemStyle Width="100px" />
                            </asp:TemplateField>

2.鼠标移动到该列单元格时弹出div层,显示全部信息

   当鼠标移动到该列到单元格时触发onmouseover事件,获取鼠标的坐标用来初始化div到坐标。用document.createElement()创建div元素,设置div到属性,最主要到是 position:absolute(这里用div分层应该能做不过对这个还不熟悉)。在onmouseout的处理方法中删除该div:view plaincopy to clipboardprint?
document.body.removeChild(div_green);//参数是i  
document.body.removeChild(div_green);//参数是i

3 .下面说完整的例子

数据库用的说nothwind  的表 Order Details Extended

 view plaincopy to clipboardprint?
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridviewDiv.aspx.cs" Inherits="GridviewDiv" %>  
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  
<html xmlns="http://www.w3.org/1999/xhtml" >  
<head runat="server">  
    <title>无标题页</title>  
       
<mce:style type="text/css"><!--   
.menuClass   
{   
    background-color:green;   
    filter:alpha(opacity=50);   
    margin-top:-2;   
    width:98px;   
    position:absolute;   
}   
--></mce:style><style type="text/css" mce_bogus="1">.menuClass   
{   
    background-color:green;   
    filter:alpha(opacity=50);   
    margin-top:-2;   
    width:98px;   
    position:absolute;   
}</style>  
       
<mce:script type="text/javascript" language ="javascript"><!--   
    function ShowRec()   
   {   
        //取得鼠标坐标   
        var x,y;   
        if(!document.all)   
        {   
            x=pageX;   
            y=pageY;   
        }   
        else   
        {   
            x=document.body.scrollLeft+event.clientX; //鼠标X轴的值   
            y=document.body.scrollTop+event.clientY; //鼠标Y轴的值   
            //  alert(x+"--"+y)   
        }   
        //创建div 设定它到属性   
        var div = document.createElement("div");   
        div.style.top = y-10;   
        div.style.left = x+10;   
//        div.style.background="green";   
        div.id="div_green";   
        div.className = "menuClass";//层样式   
           
        document.body.appendChild(div);   
        //获取存放完整信息的div   
        var ele = event.srcElement;   
        var rec = ele.nextSibling;   
           
        div.innerHTML =rec.innerHTML ;   
      
//         var ele = event.srcElement;   
//         var rec = ele.nextSibling;   
//         rec.style.display = '';        
//        if(rec)   
//        {   
//            if(rec.style.display ='none')   
//            {   
//                rec.style.display = '';   
//            }   
//            else   
//            {   
//                rec.style.display ='none';   
//            }   
//        }   
   }   
      
    function DropDiv()   
   {   
   //删除div   
        document.body.removeChild(div_green);//参数是i   
   }   
      
// --></mce:script>  
</head>  
<body>  
    <form id="form1" runat="server">  
    <div>  
    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="OrderID,ProductID"  
                DataSourceID="SqlDataSource1" Width="399px" AllowPaging="True">  
                <Columns>  
                    <asp:BoundField DataField="OrderID" HeaderText="OrderID" ReadOnly="True" SortExpression="OrderID" />  
                    <asp:BoundField DataField="ProductID" HeaderText="ProductID" ReadOnly="True" SortExpression="ProductID" />  
                    <asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" >  
                    </asp:BoundField>  
                    <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" />  
                    <asp:BoundField DataField="Quantity" HeaderText="Quantity" SortExpression="Quantity" />  
                    <asp:BoundField DataField="Discount" HeaderText="Discount" SortExpression="Discount" />  
                    <asp:BoundField DataField="ExtendedPrice" HeaderText="ExtendedPrice" ReadOnly="True"  
                        SortExpression="ExtendedPrice" />  
                       
                    <asp:TemplateField HeaderText="标题" SortExpression="ProductName">    
                         <ItemTemplate>    
                            <a onmouseout="DropDiv();" onmouseover="ShowRec();" > <%# Eval("ProductName").ToString().Length > 10 ? Eval("ProductName").ToString().Substring(0,10) + "..." : Eval("ProductName").ToString() %> </a>  
                            <div id="divRec" style="display:none" mce_style="display:none"> <%# DataBinder.Eval(Container.DataItem, "ProductName")%> </div>  
                        </ItemTemplate>    
                            <ItemStyle Width="360px" Wrap="False" />    
                    </asp:TemplateField>    
  
                </Columns>  
            </asp:GridView>  
  
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"  
                SelectCommand="SELECT * FROM [Order Details Extended]"></asp:SqlDataSource>  
       
    </div>  
    </form>  
</body>  
</html> 

 

 posted on 2011-11-13 13:31  纳米程序员  阅读(4409)  评论(1编辑  收藏  举报