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

csb_tom_new 2004-11-01 11:18:55
我想实现如下的显示效果,但不知道怎么办,请各位指点,最好能有代码。谢谢!
一个DataGrid,某一列内容比较多,如果全部显示,即使是用warp=true,也会把cell撑得很大。
如何实现:
1、当内容超过列长度时,后面的部分不显示,而是用省略号表示。
2、当鼠标移到这个Cell时,以类似于ToolTip的形式显示Cell的全部内容。
只要能解决一个问题都给分。
...全文
275 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
加载更多回复(5)

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧