asp.net中GridView绑定后的字符截取

    问题

 

     现在有这样一个需求,将一个表绑定到中,其中有一列是绑定的标题,我想这一列就显示10个字符,如果超过10个字符就截取10个字符然后+.... 。 然后想到了gvdongtai_RowDataBound 这个事件 。  于是

  1.  <asp:GridView ID="gvdongtai" AutoGenerateColumns="False" runat="server" Width="170px"
  2.                     GridLines="None" OnRowDataBound="gvdongtai_RowDataBound">
  3.                     <Columns>
  4.                         <asp:TemplateField>
  5.                             <ItemTemplate>
  6.                                 <li><a href='DynamicNews.aspx?DynamicID=<%#Eval("ID")%>' class="c">
  7.                                     <%#Eval("Title")%>
  8.                                 </a></li>
  9.                                 <asp:Label ID="test" runat="server" Visible="false" Text='<%#Eval("Title") %>' />
  10.                             </ItemTemplate>
  11.                         </asp:TemplateField>
  12.                     </Columns>
  13.                 </asp:GridView>
  14. //后台
  15. protected void gvdongtai_RowDataBound(object sender, GridViewRowEventArgs e)
  16.     {
  17.         if (e.Row.RowType == DataControlRowType.DataRow)
  18.         {
  19.             1种 //string s = e.Row.Cells[0].Text;
  20.             //Label mylabel = new Label();
  21.             //mylabel = (Label)e.Row.FindControl("Test");
  22.             2种//string s = mylabel.Text.Trim();
  23.             3种string s = DataBinder.Eval(e.Row.DataItem, "Title").ToString().Trim();
  24.             //e.Row.Cells[0].Text = s.Length > 20 ? s.Substring(0, 20) : s.Trim();
  25.         }
  26.     }

 

三种修改的方法  ,其中第一种 ,根本获得不到值 ,我现在也没搞懂为什么获取的都是“”
                      第二种,第三种都可以正常获得值 。但是再重新修改e.Row.Cells[0].Text 的时候,我本来这一个字段是超链接字段,这样修改以后,超链接没有了。

 

    解决方案:

 

    1(kaigefengchen 的解决方案).

             <ItemTemplate>
                    <%# DataBinder.Eval(Container.DataItem, "Info").ToString().Substring(0,10)%>  //当然这里边可以使用 ? : 运算符判断
            </ItemTemplate>
    2(waltguo 的解决方案).

  1. public static string CutString(string inputString, int len)
  2.     {
  3.         ASCIIEncoding ascii = new ASCIIEncoding();
  4.         int tempLen = 0;
  5.         string tempString = "";
  6.         byte[] s = ascii.GetBytes(inputString);
  7.         for (int i = 0; i < s.Length; i++)
  8.         {
  9.             if ((int)s[i] == 63)
  10.             {
  11.                 tempLen += 2;
  12.             }
  13.             else
  14.             {
  15.                 tempLen += 1;
  16.             }
  17.             try
  18.             {
  19.                 tempString += inputString.Substring(i, 1);
  20.             }
  21.             catch
  22.             {
  23.                 break;
  24.             }
  25.             if (tempLen > len)
  26.                 break;
  27.         }
  28.         //如果截过则加上半个省略号
  29.         byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString);
  30.         if (mybyte.Length > len)
  31.             tempString += "…";
  32.         return tempString;
  33.     }

 

     <%# Strings.CutString(Eval("NewsTitle").ToString(),10)%>//这是前台,aspx页面里的,调用,一Strings类的CutString方法,这样就可以实现了。,

 

    让我搞了1个小时 还是别人帮忙的。   记录一下。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值