• 全部
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

如何实现这样的DataGrid显示效果?

csb_tom_new 2004-11-01 11:18:55
我想实现如下的显示效果,但不知道怎么办,请各位指点,最好能有代码。谢谢!
一个DataGrid,某一列内容比较多,如果全部显示,即使是用warp=true,也会把cell撑得很大。
如何实现:
1、当内容超过列长度时,后面的部分不显示,而是用省略号表示。
2、当鼠标移到这个Cell时,以类似于ToolTip的形式显示Cell的全部内容。
只要能解决一个问题都给分。
...全文
236 点赞 收藏 25
写回复
25 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sdenli 2004-11-02
都非常厉害
回复
极客行天下 2004-11-02
我喜欢对数据集做处理,感觉这样很直观……
回复
lover_007 2004-11-02
感谢 CCTV MTV CHINA V
回复
kbkingbird 2004-11-02
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//只要求取前5位,多于5则取…
if(e.Item.Cells[0].Text.Length > 5)
{
e.Item.Cells[0].Attributes.Add("ID", e.Item.Cells[0].Text);
e.Item.Cells[0].Text = e.Item.Cells[0].Text.Substring(0, 5) + "…";
}
}
}

public void ItemDataBound(Object sender, DataGridItemEventArgs e)
{
DataRowView drv = (DataRowView) e.Item.DataItem;
if (drv == null)
return;

if (drv["列名"].ToString().Length > 你要设定的值)
{
drv["列名"] = GetStrLeng( drv["列名"] ,取值长度);
}
}

///GetStrLeng是你自己写函数,功能是按你传进的字符串及长度,返回传入长度的值.


kingbird发表评论于2004-10-27 14:41:57 | 引用
回复
lhcoolhacker 2004-11-02
给你一个函数,我做的。示例参考www.hr98.cn,左下侧的“职称资讯”
/// <summary>
/// 应用程序字符串处理类
/// </summary>
public class ApplicationString
{
/// <summary>
/// 字符串截取
/// </summary>
/// <param name="cutStr">要截取的字符串</param>
/// <param name="length">截取长度</param>
/// <returns>截取后的字符串</returns>
public static string CutString(string cutStr, int length)
{
if(cutStr == null || cutStr == string.Empty)
return null;

string cutString = cutStr;
byte[] cutStrArray = Encoding.Default.GetBytes(cutString);
int cutStrLength = cutStrArray.Length;

if(cutStrLength > length)
{
cutString = Encoding.Default.GetString(cutStrArray, 0, length);
cutString += "...";
}

return Server.HtmlEncodeString(cutString);
}
}

使用范例:
<%# ApplicationString.CutString(((CommunionModel)Container.DataItem).Title, 25) %>
回复
chenhaoying 2004-11-02
<asp:TemplateColumn>
<HeaderStyle Width="10px"></HeaderStyle>
<ItemTemplate>
<asp:TextBox ID="textbox1" Runat="server" Text='<%# ( DataBinder.Eval(Container.DataItem,"text1").ToString().Length>=100?DataBinder.Eval(Container.DataItem,"text1").ToString.Substring(0,100)+"...":DataBinder.Eval(Container.DataItem,"text1").ToString() ) %>'
ToolTip='<%# DataBinder.Eval(Container.DataItem,"Empid").ToString() %>'>
</asp:TextBox> </ItemTemplate> </asp:TemplateColumn>
我一直都用这个的,刚刚也试了,没问题。
回复
zhrenxi 2004-11-01
学习
回复
bxf2008 2004-11-01
谢谢楼主问了这么好的问题。学习!
回复
chenhaoying 2004-11-01
'<%# ( DataBinder.Eval(Container.DataItem,"text1").ToString().Length>=100?DataBinder.Eval(Container.DataItem,"text1").ToString.Substring(0,100)+"...":DataBinder.Eval(Container.DataItem,"text1").ToString() ) %>'

ToolTip='<%# DataBinder.Eval(Container.DataItem,"text1").ToString() %>'
回复
LiaoJinzhou 2004-11-01
假如楼上说过的都不行的话,你可以试一下这个笨办法:

在itemdatabind事件中将cell中的文本按一定的长度截断,再加上...后放入一个label的text属性中,再将原文放入tooltip属性中。再将这个label加入到cell[i].controls中。
回复
goodhy 2004-11-01
1、当内容超过列长度时,后面的部分不显示,而是用省略号表示.
>>>> cmd.CommandText = sql
da.Fill(ds, "yxgz")
dtable = ds.Tables("yxgz")
For i = 0 To dtable.Rows.Count - 1
str = dtable.Rows(i)("zcyx").ToString()
num = str.Length
If num > 4 Then
str = Left(str, 6) & "..."
dtable.Rows(i)("zcyx") = str
End If
Next
Me.DataGrid1.DataSource = dtable.DefaultView
Me.DataGrid1.DataBind()

回复
rickjelly2004 2004-11-01
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

If e.Item.ItemType = ListItemType.Item Or _
e.Item.ItemType = ListItemType.AlternatingItem Or _
e.Item.ItemType = ListItemType.SelectedItem Then
e.Item.Cells(0).ToolTip = e.Item.Cells(0).text
e.Item.Cells(0).Text = e.Item.Cells(0).Text.ToString.Substring(1, 10) & "……"
end if
回复
rickjelly2004 2004-11-01
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

If e.Item.ItemType = ListItemType.Item Or _
e.Item.ItemType = ListItemType.AlternatingItem Or _
e.Item.ItemType = ListItemType.SelectedItem Then
e.Item.Cells(0).ToolTip = e.Item.Cells(0).text
e.Item.Cells(0).Text = e.Item.Cells(0).Text.ToString.Substring(1, 10)
end if
回复
rickjelly2004 2004-11-01
select substring(lie,0,10) | '……" from table
回复
rickjelly2004 2004-11-01
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

If e.Item.ItemType = ListItemType.Item Or _
e.Item.ItemType = ListItemType.AlternatingItem Or _
e.Item.ItemType = ListItemType.SelectedItem Then
e.Item.Cells(0).ToolTip = "你要的数据"
回复
F15Eagle 2004-11-01
绑定一下ToolTip看可以不?不知道可以不,哎,就算帮顶了!
回复
Coder2k 2004-11-01
帮你顶!!
回复
关注
回复
噯卟釋手 2004-11-01
那还不容易 直接把你要绑定的数据取字符串 如果你的DataGrid的Cell宽度是10 就取数据的前10位 + " ... " 绑定 不到100位就拉倒呗 直接绑
回复
shoutor 2004-11-01
http://blog.csdn.net/shoutor/archive/2004/08/06/66742.aspx
回复
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2004-11-01 11:18
社区公告
暂无公告