就是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、使用模版列方法
用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>我各人认为第三种这种方法可行的,但是一直没有实验成功。
有没有高手指点一下,如何处理。谢谢!
在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;
}
有些事情还是想简单一些比较好.
应该更正一下,是DataGrid的RowDataBound事件,DataGrid有这个事件吗、?
把css样式定义一个宽度 --这个是给什么定义一个宽度?
</asp:Label>
/// <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/