我在模板列中取了两个字段,我想将这两个字段合并之后再截取长度
<asp:TemplateField HeaderText="第一列">
  <ItemTemplate>
     <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("sid","~/show.aspx?id={0}") %>' Target="_blank"><%# DataBinder.Eval(Container.DataItem, "s1", "{0}")%><%# DataBinder.Eval(Container.DataItem, "s2", "{0}")%></asp:HyperLink>
   </ItemTemplate>
   <ItemStyle Width="140px" />
</asp:TemplateField>我本来想在后台这样写的
e.Row.Cells[1].Text = dbcode.getstr(e.Row.Cells[1].Text, 15);  //dbcode.getstr是一个截取方法
但这样写取出来就变成空的了求教一下啊

解决方案 »

  1.   

    e.Row.Cells[1].Text = dbcode.getstr(e.Row.Cells[1].Text, 15); 改成如下试:string a = e.Row.Cells[1].Text;
    e.Row.Cells[1].Text = dbcode.getstr(a, 15);
      

  2.   

    推荐先写个合并字符串的方法AddStr(),在直接 Text='<%#dbcode.getstr( AddStr( Eval("s1"),Eval("s2")).ToString(),20) %>' ToolTip='<%#AddStr( Eval("s1"),Eval("s2")) %>'
      

  3.   

    <asp:TemplateField>
        <ItemTemplate>
             <asp:HyperLink ID="HyperLink1" runat="server" Target="_blank"><%#( Eval ( "s1" ).ToString () + Eval ( "s2" ).ToString () ).Substring ( 0, 15 )%></asp:HyperLink>
        </ItemTemplate>
    </asp:TemplateField> 
      

  4.   

    <%#%>是可以帮表达式的,所以你可以构造你想要的数据。不单单是Eval()
      

  5.   

    使用上述方法,出错提示:System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。
      

  6.   

       public static string CutOff(string original, int leftLength)
            {
                if (original == null)
                {
                    return null;
                }            int originalLength = original.Length;
                int calucateLength = 0;
                int lastCharLength = 0;
                System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"[^\x00-\xff]");            for (int i = 0; i < originalLength; i++)
                {
                    int thisCharLength = 0;
                    if (reg.Match(original, i, 1).Success)
                    {
                        calucateLength += 2;
                        thisCharLength = 2;
                    }
                    else
                    {
                        calucateLength += 1;
                        thisCharLength = 1;
                    }
                    //如果超过了长度限制,就将当前字符和上一个字符去掉,同时要考虑,如果上一个字符为全角,就只取一个
                    //如果为半角就去两个
                    if (calucateLength > leftLength * 2)
                    {
                        return original.Substring(0, i - (lastCharLength == 1 ? 2 : 1)) + "..";
                    }
                    lastCharLength = thisCharLength;
                }
                return original;
            }
    你直接使用cutoff(你的数据,长度)就可以了