GridView实现用“...”代替超长字符串的问题

S_zxing 2011-06-05 11:24:44
我用三层结构做的,转换之后,在GridView里面就是显示不出来"....",很纠结啊,我不知道到底哪里出现了问题。
下面是代码,请各位帮忙看一下,谢谢……
后台代码:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
GridViewNoticeBind();
}

public void GridViewNoticeBind()
{
// 绑定数据源,NoticeBLL中的GetNotice()方法
NoticeBLL noticeObject = new NoticeBLL();
GridViewNotice.DataSource = noticeObject.GetNotice();
GridViewNotice.DataKeyNames = new string[] { "No" };
GridViewNotice.DataBind();

for (int i = 0; i < GridViewNotice.Rows.Count; i++)
{
if (GridViewNotice.PageIndex == 0)
{
// GridView实现用“...”代替超长字符串
string gInfor = Convert.ToString(noticeObject.GetNotice().Rows[i]["NoticeTitle"].ToString());
this.GridViewNotice.Rows[i].Cells[1].Text = SubStr(gInfor, 10); // 将"公告内容"这列实现

char noticeFlag = Convert.ToChar(noticeObject.GetNotice().Rows[i]["NoticeFlag"].ToString());
if (noticeFlag == '1')
this.GridViewNotice.Rows[i].Cells[3].Text = "是";
else
this.GridViewNotice.Rows[i].Cells[3].Text = "否";
}
else
{
// GridView实现用“...”代替超长字符串
string gInfor = Convert.ToString(noticeObject.GetNotice().Rows[i + GridViewNotice.PageSize * GridViewNotice.PageIndex]["NoticeTitle"].ToString());
this.GridViewNotice.Rows[i].Cells[1].Text = SubStr(gInfor, 10); // 将"公告内容"这列实现

char noticeFlag = Convert.ToChar(noticeObject.GetNotice().Rows[i + GridViewNotice.PageSize * GridViewNotice.PageIndex]["NoticeFlag"].ToString());
if (noticeFlag == '1')
this.GridViewNotice.Rows[i].Cells[3].Text = "是";
else
this.GridViewNotice.Rows[i].Cells[3].Text = "否";
}
}
}
// 实现"..."代替超长字符串的条用方法
public string SubStr(string s, int nLen)
{
if (s.Length <= nLen)
return s;
string newStr = s.Substring(0, nLen);
newStr += "....";
return newStr;
}


前台代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/AdminSite.master" AutoEventWireup="true" CodeFile="SysInfor.aspx.cs" Inherits="SysInfor" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<div style="margin-top:3px;">
<div style="width:520px; border-bottom:1px dashed #ccc;">
<h3 style="margin:0,0,5px,10px; width:200px; font-weight:bold;">
===修改系统公告===
</h3>
</div>
<div style="width:530px; margin-top:30px;">
<asp:GridView ID="GridViewNotice" runat="server" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333" GridLines="None" CssClass="gridviewText"
onselectedindexchanging="GridViewNotice_SelectedIndexChanged" AllowPaging="True"
AllowSorting="True" PageSize="3"
onrowdatabound="GridViewNotice_RowDataBound">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField DataField="No" Visible="False" />
<asp:BoundField DataField="NoticeTitle" HeaderText="公告内容">
<ItemStyle Width="40%" />
</asp:BoundField>
<asp:BoundField DataField="NoticeDate" HeaderText="公告时间">
<ItemStyle Width="20%" />
</asp:BoundField>
<asp:BoundField DataField="NoticeFlag" HeaderText="是否显示">
<ItemStyle Width="20%" />
</asp:BoundField>
<asp:ButtonField CommandName="Select" HeaderText="选择" Text="修改">
<ItemStyle Width="10%" />
</asp:ButtonField>
<asp:ButtonField HeaderText="删除" Text="删除" >
<ItemStyle Width="10%" />
</asp:ButtonField>
</Columns>
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
</div>
</div>
</asp:Content>
...全文
102 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
仅仅在设计页面使用返回string的函数来解决,是最简洁清晰好维护的做法。不涉及事件、GridView,更不必涉及什么“三层”概念。
wosizy 2011-06-05
  • 打赏
  • 举报
回复
换成模板列 就能实现...
目前我没用过 不用模板列 就能实现的

下面是我项目里用到的代码 gricview 全部代码就不写了 只贴个示例
<asp:TemplateField HeaderText="地点" SortExpression="Delv_Add">
<ItemTemplate>
<asp:Label ID="lbl_Delv_Add" runat="server" Text='<%# JSCommon.JSdate(Convert.ToString(Eval("Delv_Add")),13) %>'
ToolTip='<%# Eval("Delv") %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" Width="170px" />
<HeaderStyle Wrap="False" Width="170px" />
</asp:TemplateField>

TMSCommon.GetStrPartly这段是JS脚本写的一个方法 参数说明 (字段,多少为字符后显示...)
S_zxing 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dingzongyinnihao 的回复:]

引用 6 楼 s_zxing 的回复:

引用 1 楼 dingzongyinnihao 的回复:

C# code


public string SubStr(string s, int nLen)
{
if (s.Length <= nLen)
return s;
return s.SubString(0,nLen)+"....";
}

这样写这个函数,我觉得……
[/Quote]
这个我已经调试过了,GridViewNotice.Rows[i].Cells[1].Text 确实能得到"....",不过在GridView里面就是出不来,现在明白怎么回事了,再次谢谢各位……
S_zxing 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 porschev 的回复:]

引用 9 楼 s_zxing 的回复:

引用 7 楼 wosizy 的回复:

这里 我提一题 清清月儿 博客了
数据绑定后过滤每一行即可
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
DataRowView mydrv;
string gIntro;
if (GridView1.PageIndex == 0)
……
[/Quote]
试了,确实可以改掉,问题好像解决了……
谢谢各位了……
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 s_zxing 的回复:]

引用 1 楼 dingzongyinnihao 的回复:

C# code


public string SubStr(string s, int nLen)
{
if (s.Length <= nLen)
return s;
return s.SubString(0,nLen)+"....";
}

这样写这个函数,我觉得很好,谢谢了……
不过没解决问题啊,我最希望……
[/Quote]

你可以断点调试一下,看到底进没进来!
porschev 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 s_zxing 的回复:]

引用 7 楼 wosizy 的回复:

这里 我提一题 清清月儿 博客了
数据绑定后过滤每一行即可
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
DataRowView mydrv;
string gIntro;
if (GridView1.PageIndex == 0)
……

对啊对啊,我就是看了清清月儿 的……
[/Quote]

3楼给你的方法你试了吗
S_zxing 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wosizy 的回复:]

这里 我提一题 清清月儿 博客了
数据绑定后过滤每一行即可
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
DataRowView mydrv;
string gIntro;
if (GridView1.PageIndex == 0)
……
[/Quote]
对啊对啊,我就是看了清清月儿 的博客的,这个必须要把前台那一列换成模板列吗?
有没有更好的办法呢?
S_zxing 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 huangwenquan123 的回复:]

HTML code

直接弄个模版列处理
<asp:TemplateField HeaderText="状态" HeaderStyle-Width="4%">
<ItemTemplate>
<%#Eval("Content").ToString().Length>10?Eval("Content").ToString()……
[/Quote]
这样的话,就得改很多东西,而且我不知道到底能不能改过来,这样之后还能绑定数据吗?
因为我除了这一列两列,还有很多东西是需要直接绑定的。
wosizy 2011-06-05
  • 打赏
  • 举报
回复
这里 我提一题 清清月儿 博客了
数据绑定后过滤每一行即可
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
DataRowView mydrv;
string gIntro;
if (GridView1.PageIndex == 0)
{
mydrv = myds.Tables["飞狐工作室"].DefaultView[i];//表名
gIntro = Convert.ToString(mydrv["家庭住址"]);//所要处理的字段
GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2);
}
else
{
mydrv = myds.Tables["飞狐工作室"].DefaultView[i + (5 * GridView1.PageIndex)];
gIntro = Convert.ToString(mydrv["家庭住址"]);
GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2);
}
}
调用
public string SubStr(string sString, int nLeng)
{
if (sString.Length <= nLeng)
{
return sString;
}
string sNewStr = sString.Substring(0, nLeng);
sNewStr = sNewStr + "...";
return sNewStr;
}

不喜欢这种方法 那么你前台就必须把那一列 换成模板列..!
S_zxing 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dingzongyinnihao 的回复:]

C# code


public string SubStr(string s, int nLen)
{
if (s.Length <= nLen)
return s;
return s.SubString(0,nLen)+"....";
}
[/Quote]
这样写这个函数,我觉得很好,谢谢了……
不过没解决问题啊,我最希望能解决问题了……
huangwenquan123 2011-06-05
  • 打赏
  • 举报
回复

直接弄个模版列处理
<asp:TemplateField HeaderText="状态" HeaderStyle-Width="4%">
<ItemTemplate>
<%#Eval("Content").ToString().Length>10?Eval("Content").ToString().Substring(0,10)+"...":Eval("Content")%>
</ItemTemplate>
</asp:TemplateField>
快溜 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ssp2009 的回复:]
你为什么不在绑定数据前就把数据处理了?
[/Quote]不好
porschev 2011-06-05
  • 打赏
  • 举报
回复

前台。。把那一列变为模版列

<%# SubStr(Eval("NoticeTitle").toString(),10) %>
快溜 2011-06-05
  • 打赏
  • 举报
回复
你为什么不在绑定数据前就把数据处理了?
  • 打赏
  • 举报
回复


public string SubStr(string s, int nLen)
{
if (s.Length <= nLen)
return s;
return s.SubString(0,nLen)+"....";
}
1.GridView无代码分页排序: 2.GridView选中,编辑,取消,删除: 3.GridView正反双向排序: 4.GridView和下拉菜单DropDownList结合: 5.GridView和CheckBox结合: 6.鼠标移到GridView某一行时改变该行的背景色方法一: 7.鼠标移到GridView某一行时改变该行的背景色方法二: 8.GridView实现删除时弹出确认对话框: 9.GridView实现自动编号: 10.GridView实现自定义时间货币等字符串格式: 11.GridView实现自定义时间货币等字符串格式: 12.GridView实现用“...”代替超长字符串: 13.GridView一般换行与强制换行: 14GridView弹出新页面/弹出制定大小位置新窗口: 15.GridView固定表头(不用javascript只用CSS!,很好用): 16.GridView合并表头多重表头无错完美版(以合并3列3行举例) 17.GridView突出显示某一单元格(例如金额低于多少,分数不及格等) 18.GridView加入自动求和求平均值小计 19.GridView数据导入Excel/Excel数据读入GridView 20.GridView实现用“...”代替超长字符串: 21.GridView一般换行与强制换行: 22.GridView显示隐藏某一列: 23.GridView弹出新页面/弹出制定大小位置新窗口: 24.GridView固定表头(不用javascript只用CSS!,很好用): 26.GridView突出显示某一单元格(例如金额低于多少,分数不及格等) 27.GridView加入自动求和求平均值小计 28.GridView数据导入Excel/Excel数据读入GridView

62,046

社区成员

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

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

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

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