请问如何实现datagrid的某列内容只显示固定长度的一部分,超过此长度用……表示?

xuehan 2003-01-02 05:22:21
例如:有列名为“标题”的列有一条记录是20个字,在datagrid中,我只想显示前十个字,然后打省略号,请问怎么解决??
...全文
118 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
forest007 2003-01-13
  • 打赏
  • 举报
回复
up
xuehan 2003-01-10
  • 打赏
  • 举报
回复
各位都是高手,就是我太笨,难道你们的HyperLinkColumn可以绑定DataBinding,我就不行吗?
TemplateColumn这个我也能用,我问的是这个HyperLinkColumn????
怎么把类似<%# TransformSubject(DataBinder.Eval(Container.DataItem, "标题")) %>绑定上去????
cuike519 2003-01-10
  • 打赏
  • 举报
回复
是的!绑定之前处理DataTable
jsPan 2003-01-10
  • 打赏
  • 举报
回复
对datagrid绑定之前的数据集进行处理啊 for eachRow .....
cuike519 2003-01-10
  • 打赏
  • 举报
回复
我想和你要的列类型没有什么关系!我写的代码很清楚!我是在DataTable中截取的和DataGrid没什么关系!你用什么列就更没有关系了!里面有一些我自己的对象希望没有影响你的理解!这是从我的程序中原样Copy的!我现在用得好好的!我的那一列和你的要求是一样的,但我还是要说和列的性质没有关系!好好看看!希望可以帮上忙!
icyer 2003-01-10
  • 打赏
  • 举报
回复
oh,你需要把3改成10
icyer 2003-01-10
  • 打赏
  • 举报
回复
唉,瞧一个简单的问题都搞成了这样。

在DataGrid的ItemDataBound事件里加入:
if (e.Item.ItemIndex >= 0)
{
HyperLink link = (HyperLink)e.Item.Cells[0].Controls[0];
if (link.Text.Length > 3)
{
link.Text = link.Text.Substring(0, 3) + "...";
}
}
xuehan 2003-01-10
  • 打赏
  • 举报
回复
请参与的各位看清楚,我是需要有联接的这种列:HyperLinkColumn

不是其他如:BoundColumn、TemplateColumn等我都能用spring_ok(SpringDotNet) 的方法和ItemDataBound方式,
惟独用HyperLinkColumn不能截取,如果你说的不是HyperLinkColumn
就免开你尊口!!!
谢谢合作!!!
cuike519 2003-01-10
  • 打赏
  • 举报
回复
1、
public MemoData GetAwake(DateTime datetime,int iBound,int iNowHour,string UserID,int iAbbreviate)
{
string strDateTime=ChangeTimeToString(datetime);
//if(grdiAbbreviate)
string SqlQuery="SELECT MemoID, UserID, LEFT(Title,"+iAbbreviate+")+'...' AS Title, BodyText, BeginTime, EndTime, MemoPlace, Modified,Created FROM pmMemo WHERE (CONVERT(varchar(10), BeginTime) = '"+strDateTime+"') AND (DATEPART(Hour, BeginTime) >= "+iNowHour+") AND (DATEPART(Hour, BeginTime) <= "+(iBound+iNowHour)+" AND UserID="+UserID+") order by BeginTime";
return FillMemoData(SqlQuery,"","");
}


2、
public MemoData GetAwake(DateTime datetime,int iBound,int iNowHour,string UserID,int iAbbreviate,DataGrid grd){
string strDateTime=ChangeTimeToString(datetime);
string SqlQuery="SELECT MemoID, UserID, Title, BodyText, BeginTime, EndTime, MemoPlace, Modified,Created FROM pmMemo WHERE (CONVERT(varchar(10), BeginTime) = '"+strDateTime+"') AND (DATEPART(Hour, BeginTime) >= "+iNowHour+") AND (DATEPART(Hour, BeginTime) <= "+(iBound+iNowHour)+" AND UserID="+UserID+") order by BeginTime";
MemoData memodata=FillMemoData(SqlQuery,"","");
grd.DataSource=memodata.Tables[0];
foreach(DataRow dr in memodata.Tables[0].Rows){
if(dr[2].ToString().Length>=iAbbreviate){
dr[2]=dr[2].ToString().Substring(0,iAbbreviate)+"...";
}
}
return memodata;
}

两种都可以!后一个是如果没有超过你的预定值将回显示所用否则按照你预定的截取!
benmo2000 2003-01-10
  • 打赏
  • 举报
回复
可以在CS文件中写DataGrid1.ItemDataBound事件,
给段VB的代码进行参考:
If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
e.Item.Cells(0).Text = formatstring(mytable.Rows(e.Item.ItemIndex)("orgid"))
End If
andy_123 2003-01-06
  • 打赏
  • 举报
回复
spring_ok(SpringDotNet) 说的就是最好的解决办法
spring_ok 2003-01-06
  • 打赏
  • 举报
回复
奇怪,我已经将代码贴在上面了,你还要什么代码啊?你改一下我代码中的字段名就可以啦。
xuehan 2003-01-06
  • 打赏
  • 举报
回复
谁有类似的代码,发一段好吗?解决马上给分,已经没时间研究了,急!!
要是:<asp:HyperLinkColumn Target="mainFrame" DataNavigateUrlField="id" DataNavigateUrlFormatString="show.aspx?id={0}" DataTextField="新闻标题"
</asp:HyperLinkColumn>
的代码,文本文件和cs文件的代码都发一下,先谢了!
大健 2003-01-06
  • 打赏
  • 举报
回复
同意sping_ok和allanli,用TemplateColumn,在datagrid的itemdatabound事件中对string进行截取
例如:
strTmp = e.Item.Cells(8).Text '取得第九列里的string
If Len(strTmp) > 14 Then '如果它的长度大于15,就截取再补"..."
strTmp = Left(strTmp, 14) & "..."
End If
xuehan 2003-01-03
  • 打赏
  • 举报
回复
还是昨天的问题,我确实不知道怎么加上去,我的列是:<asp:HyperLinkColumn Target="mainFrame" DataNavigateUrlField="id" DataNavigateUrlFormatString="show.aspx?id={0}" DataTextField="新闻标题"
</asp:HyperLinkColumn>
xuehan 2003-01-02
  • 打赏
  • 举报
回复
谢谢各位,先试试。
allanli 2003-01-02
  • 打赏
  • 举报
回复
同意楼上的,在itemdatabound中截取吧,挺方便的,连该列的控件都可以改变,还有什么办不了的呢
xuehan 2003-01-02
  • 打赏
  • 举报
回复
我是说datagrid控件几个属性设置好就行了,更本不用对它显示记录进行编程,如果用for循环来判断,就要编程,但是这种方式我从来没用过,我对asp.net很差,各位大虾能不能来点代码示例??
xhan2000 2003-01-02
  • 打赏
  • 举报
回复
可以自定义datatable,进行截取

然后榜定

或者

在itemdatabound中街区
spring_ok 2003-01-02
  • 打赏
  • 举报
回复
<asp:TemplateColumn HeaderText="Subject">
<ItemTemplate>
<%# TransformSubject(DataBinder.Eval(Container.DataItem, "Subject")) %>
</ItemTemplate>
</asp:TemplateColumn>

.aspx.cs中:

public string TransformSubject(object subject)
{
string strSubject = subject.ToString();
if (strSubject.Length <= 20)
{
return strSubject;
}
else
{
strSubject = strSubject.SubString(0, 20) + "....";
return strSubject;
}
}
加载更多回复(4)

62,046

社区成员

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

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

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

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