如何使GridView里面的其中一个字段只显示前5个字符串

时间:2022-02-15 14:47:27
各位朋友,想请教一下,小弟想使GridView里面的其中一个字段在显示的时候,只显示前5个字符串,GridView里面已经指定了一个数据源,该字段叫“备注”注段,然后将其转换为TemplateField,然后在ASP里面的代码如下:
 <ItemTemplate>
 <asp:Label ID="Label1" runat="server" Text='<%# (Eval("concent")).Tostring.Substring(0,5) %>'></asp:Label>
</ItemTemplate>
但系统提示以下错误提示:
错误 1 “object”并不包含“Tostring”的定义 C:\SureWinWeb\WebSite13\Default-示例2.aspx 28


请问该怎样改,才可以使该字段在GridView里面只显示前5个字符呢? 
请各位朋友赐教,谢谢!!!

6 个解决方案

#1


  <%# CutString(Eval("title").ToString(), 37)%>


<ItemTemplate > 
<asp:Label ID="Label1" runat="server" Text= ' <%# (Eval("concent")).Tostring.Substring(0,5) % > ' > </asp:Label > 
</ItemTemplate > 

变为,注:CutString(string str,int length)是后台定义的一个公有函数,str为要显示的数据,length为要显示长度.

<ItemTemplate > 
<asp:Label ID="Label1" runat="server" Text= '<%# CutString(Eval("concent").ToString(), 40)%>' > </asp:Label > 
</ItemTemplate > 

后台代码

        /// <summary>
        /// 按字符串实际长度截取定长字符窜
        /// </summary>
        /// <param name="str">原字符串</param>
        /// <param name="length">要截取的长度</param>
        /// <returns>string型字符串</returns>
        public static string CutString(string str, int length)
        {
            string delsqace = str.Trim();
            int i = 0, j = 0;
            foreach (char chr in delsqace)
            {
                if ((int)chr > 127)
                {
                    i += 2;
                }
                else
                {
                    i++;
                }
                if (i > length)
                {
                    delsqace = delsqace.Substring(0, j) + "...";
                    break;
                }
                j++;
            }
            return delsqace;

        }

#2


楼上的朋友,首先感谢您的热心回复,并且试验通过,另外,请教一下大虾你的代码的意思,总共有三个问题,请再赐教,谢谢!!!



foreach (char chr in delsqace)//问题1:这句该咋理解,不太好理解,
            {
                if ((int)chr > 127)//问题2:为什么如果Chr的长度大于127就将I的值加2呢?否则就I++呢?
                {
                    i += 2;
                }
                else
                {
                    i++;
                }
                if (i > length)//问题3:为什么I>length的长度就执行下面的动作呢?
                {
                    delsqace = delsqace.Substring(0, j) + "...";
                    break;
                }
                j++;
            }

#3




foreach (char chr in delsqace)//问题1:这句该咋理解,不太好理解,
                                     解答:从你输入的字符串中一个一个的取字节.看看C#基本语法 
            { 
                if ((int)chr  > 127)//问题2:为什么如果Chr的长度大于127就将I的值加2呢?否则就I++呢? 
                { 
                    i += 2;          解答2:判断字符的ACSII码,如果大于127就是中文,显示要两位,i=i+2
                }                          要小于127是是一个字节,显示只要一位i++ 
                 else 
                { 
                    i++; 
                } 
                if (i  > length)//问题3:为什么I >length的长度就执行下面的动作呢? 
                {                   解答3:因为你上面不是计算出你输入字符串的长度吗?
                                       要是字符串的长度小于你要显示的长度,就不用截取.
                                       要是字符串的长度大于你要显示的长度,就按长度截取.
                    delsqace = delsqace.Substring(0, j) + "..."; 
                    break; 
                } 
                j++; 
            } 

#4


学习中 

#5


<ItemTemplate > 
<asp:Label ID="Label1" runat="server" Text= ' <%# (Eval("concent")).Tostring.Substring(0,5) % > ' > </asp:Label > 
</ItemTemplate > 


改为:
<ItemTemplate > 
<asp:Label ID="Label1" runat="server" Text= ' <%# (Eval("concent")).Tostring().Substring(0,5) % > ' > </asp:Label > 
</ItemTemplate > 

#6


感谢楼上各位大虾的热心回复,特别感谢“东北小胖”大虾。
另外,“hayou1231”大虾的代码也是行得通的,但假如你字段只有4个字符串,如果你要截取6个的话,就会出错的,而采用“东北小胖”的方法,就不存在这个BUG。

再次谢谢!!!

#1


  <%# CutString(Eval("title").ToString(), 37)%>


<ItemTemplate > 
<asp:Label ID="Label1" runat="server" Text= ' <%# (Eval("concent")).Tostring.Substring(0,5) % > ' > </asp:Label > 
</ItemTemplate > 

变为,注:CutString(string str,int length)是后台定义的一个公有函数,str为要显示的数据,length为要显示长度.

<ItemTemplate > 
<asp:Label ID="Label1" runat="server" Text= '<%# CutString(Eval("concent").ToString(), 40)%>' > </asp:Label > 
</ItemTemplate > 

后台代码

        /// <summary>
        /// 按字符串实际长度截取定长字符窜
        /// </summary>
        /// <param name="str">原字符串</param>
        /// <param name="length">要截取的长度</param>
        /// <returns>string型字符串</returns>
        public static string CutString(string str, int length)
        {
            string delsqace = str.Trim();
            int i = 0, j = 0;
            foreach (char chr in delsqace)
            {
                if ((int)chr > 127)
                {
                    i += 2;
                }
                else
                {
                    i++;
                }
                if (i > length)
                {
                    delsqace = delsqace.Substring(0, j) + "...";
                    break;
                }
                j++;
            }
            return delsqace;

        }

#2


楼上的朋友,首先感谢您的热心回复,并且试验通过,另外,请教一下大虾你的代码的意思,总共有三个问题,请再赐教,谢谢!!!



foreach (char chr in delsqace)//问题1:这句该咋理解,不太好理解,
            {
                if ((int)chr > 127)//问题2:为什么如果Chr的长度大于127就将I的值加2呢?否则就I++呢?
                {
                    i += 2;
                }
                else
                {
                    i++;
                }
                if (i > length)//问题3:为什么I>length的长度就执行下面的动作呢?
                {
                    delsqace = delsqace.Substring(0, j) + "...";
                    break;
                }
                j++;
            }

#3




foreach (char chr in delsqace)//问题1:这句该咋理解,不太好理解,
                                     解答:从你输入的字符串中一个一个的取字节.看看C#基本语法 
            { 
                if ((int)chr  > 127)//问题2:为什么如果Chr的长度大于127就将I的值加2呢?否则就I++呢? 
                { 
                    i += 2;          解答2:判断字符的ACSII码,如果大于127就是中文,显示要两位,i=i+2
                }                          要小于127是是一个字节,显示只要一位i++ 
                 else 
                { 
                    i++; 
                } 
                if (i  > length)//问题3:为什么I >length的长度就执行下面的动作呢? 
                {                   解答3:因为你上面不是计算出你输入字符串的长度吗?
                                       要是字符串的长度小于你要显示的长度,就不用截取.
                                       要是字符串的长度大于你要显示的长度,就按长度截取.
                    delsqace = delsqace.Substring(0, j) + "..."; 
                    break; 
                } 
                j++; 
            } 

#4


学习中 

#5


<ItemTemplate > 
<asp:Label ID="Label1" runat="server" Text= ' <%# (Eval("concent")).Tostring.Substring(0,5) % > ' > </asp:Label > 
</ItemTemplate > 


改为:
<ItemTemplate > 
<asp:Label ID="Label1" runat="server" Text= ' <%# (Eval("concent")).Tostring().Substring(0,5) % > ' > </asp:Label > 
</ItemTemplate > 

#6


感谢楼上各位大虾的热心回复,特别感谢“东北小胖”大虾。
另外,“hayou1231”大虾的代码也是行得通的,但假如你字段只有4个字符串,如果你要截取6个的话,就会出错的,而采用“东北小胖”的方法,就不存在这个BUG。

再次谢谢!!!