代码在下面,就是读取数据库文章,然后标题判断下是否过长,如果很长就截取加..,如果短就直接显示。问题是,数据结果,无论标题长短都加了..?什么原因?public partial class index_bbs : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string ConStr = "server=127.0.0.1;database=dnt2;uid=sa;pwd=honda9988";
            SqlConnection con = new SqlConnection(ConStr);
            string SqlStr = "select top 11 * from dnt_topics order by Tid desc";
            SqlDataAdapter ada = new SqlDataAdapter(SqlStr, con);
            con.Open();
            DataSet ds = new DataSet();
            ada.Fill(ds);
            Repeater1.DataSource = ds;
            Repeater1.DataBind();
            con.Close();
            
        }
        public static string CutStr(string str, int len)
        {
            string mystr = str;
            int allLen = mystr.Length;
            if (len > allLen)
            {
                return str;
            }
            else
            {
                return mystr.Substring(0, len) + "..";
            }
        }        protected void Repeater1_ItemDataBound(object source, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
            {                ((Label)e.Item.FindControl("title")).Text = CutStr(DataBinder.Eval(e.Item.DataItem, "title").ToString(), 17);
            }
        }
    }结果:
·滨河舰队第一届射击比赛 ..
[07-01]·深圳蛇口港惊险“龙吸水”!!还是双..
[07-01]·看看美女 ..
[07-01]·三国之五虎将的传说 ..
[07-01]·轮胎参数中必须知的秘密 ..
[07-01]·CS枪械及作战技巧 ..
[07-01]·CS狂谈之见枪行事 ..
[07-01]·CS战术指导 ..
[07-01]·滨河舰队扬帆启航 第一届海洋文化..
[07-01]·精辟 ..
[07-01]·个性签名推荐 ..

解决方案 »

  1.   

    public static string CutStr(string str, int len)
      {
       return Encoding.Default.GetByteCount(str)> Len?str.Substring(0, len)+"...":str;
      }
      

  2.   

    断点调试,看看每次allLen的值
      

  3.   

    没看出来哪里问题 public static string CutStr(string str, int len)
      {
      string mystr = str;
      int allLen = mystr.Length;
      if (len > allLen)
      {
      return mystr;
      }
      else
      {
      return mystr.Substring(0, len) + "..";
      }
      }
      

  4.   

    用了1楼的方法还是不行,问题照旧,我把前台代码贴出来:<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" >
                <ItemTemplate>
                    <li><span>[07-01]</span><a href="/bbs/showtopic-<%# DataBinder.Eval(Container.DataItem,"tid") %>.aspx" target="_blank">·<asp:Label runat="server" ID="title" Text="1"></asp:Label></a></li><li>
                </ItemTemplate>
            </asp:Repeater>
      

  5.   

    好像确实问题在长度上,我输出长度,全部是60,怎么是60呢?DataBinder.Eval(e.Item.DataItem, "title").ToString() 的长度都是60,难道不能这么写?还可以咋写?
      

  6.   

    问题已经解决,谢谢各位,在一楼的基础上改了下就行了,Encoding.Default.GetByteCount(str) 这种方法统计的长度就是对了,不过都大了60,减去60就行了,用我的错误的计算,直接.length,长度就都是60,不知道什么原因?
      

  7.   

    改成在前台页面调用方法看看
    <asp:Label runat="server" ID="title" Text="<%#Cutstr(Eval(Title).ToString(),17)%>"></asp:Label>
      

  8.   

    <asp:Label runat="server" ID="title" Text="<%#Cutstr(Eval("Title").ToString(),17)%>"></asp:Label>
      

  9.   

    奇怪!!.length那样不是也不会是60呀!