截断RadGrid列中的文本

时间:2010-01-19 15:21:19

标签: c# asp.net linq gridview truncate

在LINQ上下文中使用Telerik RadGrid *,使用ASP.NET / C#,如何在列中显示时将文本截断为最大长度?最大值,我的意思是如果原始字符串的长度短于指定的最大长度,则不会产生错误。

我在网上看到了很多这样的例子,但是当使用LINQ时,似乎用来实现这一点的Container.DataItem是不同的。有时我们会将DataItem视为一种方法,有时则不然。示例通常使用DataSet

以下是找到的示例(source):

<asp:TemplateField HeaderText="Description">
  <ItemTemplate>
    <%# ValidateString(Container.DataItem("Description")) %>
  </ItemTemplate>
</asp:TemplateField>

代码隐藏:

protected string ValidateString(object String)
{
  if ((String.ToString().Length > 50))
  {
    return String.ToString().Substring(0, 50) + "...";
  }
  else
  {
    return String.ToString();
  }
}

感谢您的帮助。

(*)或普通的GridView,应该是兼容的。

4 个答案:

答案 0 :(得分:3)

我会挂钩OnItemDataBound事件并在你的代码后面执行此操作。将数据项转换为自定义对象并查询属性,如下所示(从内存中键入一些内容):

protected void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
     if (e.Item is GridDataItem)
     {
          GridDataItem dataBoundItem = e.Item as GridDataItem;
          CustomObject o = e.Item.DataItem as CustomObject;

          if(o.Description.Length > 50)
          {
               dataBoundItem["Description"].Text = o.Description.Substring(0, 47) + "..."
          }
      }
}

或者,如果您想坚持使用您正在使用的方法,请在您的aspx中尝试以下内容

<telerik:GridTemplateColumn>
     <ItemTemplate>
          <%# ValidateString(Eval("Description").ToString()) %>
     </ItemTemplate>
</telerik:GridTemplateColumn>

答案 1 :(得分:1)

使用ItemDataBound事件的 rrrr 的想法是一个很好的领导。但是,通过使用带有内部联接的自定义查询来填充网格,我无法使用CustomObject属性。我通过直接修改其文本来使用dataBoundItem["ColumnName"]。事实上,解决方案很简单!

以下是一个例子:

protected void RadGrid1_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
        GridDataItem dataBoundItem = e.Item as GridDataItem;
        if (dataBoundItem["ColumnName"].Text.Length > 100)
        {
            dataBoundItem["ColumnName"].Text = dataBoundItem["ColumnName"].Text.Substring(0, 100) + "...";
        }
    }
}

顺便说一句,感谢 rrrr

答案 2 :(得分:0)

使用转换器也适用于此。

<UserControl.Resources>
    <myConverters:SubStringConverter x:Key="First50CharactersConverter" Length="50" ShowEllipse="True" />
</UserControl.Resources>
...
<telerik:GridViewDataColumn DataMemberBinding="{Binding Comments, Converter={StaticResource First50CharactersConverter}}" Header="Comments">

转换器子串类:

    /// <summary> Mimics the behavior of string.substring for use in XAML </summary>
public class SubStringConverter : IValueConverter
{
    /// <summary> the zero-based starting character position </summary>
    public int StartIndex { get; set; }

    /// <summary> The number of characters in the substring </summary>
    public int Length { get; set; }

    /// <summary> shows "..." if value was truncated after StartIndex</summary>
    public bool ShowEllipse { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string valueString = value as string;
        if (string.IsNullOrWhiteSpace(valueString) == false)
        {
            if (Length > 0 && Length < (valueString.Length + StartIndex))
            {
                if (ShowEllipse)
                    return valueString.Substring(StartIndex, Length - 3) + "...";
                else
                    return valueString.Substring(StartIndex, Length);
            }
            else if (StartIndex < valueString.Length)
                return valueString.Substring(StartIndex);
            else
                return ""; //because startIndex must be past the length of the string
        }
        else
        {
            return value;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 3 :(得分:0)

您的代码没问题。只需更改&#34; Container.DataItem&#34;到&#34; Eval&#34;。并保持一切尽在掌握。然后尝试一下。我希望它能奏效...... 所有赌注

<强>现有                     &lt;%#ValidateString(Container.DataItem(&#34; Description&#34;))%&gt;            

<强>的变化:                     &lt;%#ValidateString(Eval(&#34; Description&#34;))%&gt;