截断在RadGrid列中的文本

截断在RadGrid列中的文本

问题描述:

使用Telerik RadGrid *在LINQ上下文中使用ASP.NET/C#,如何在列中显示时将文本截断为最大长度?最大限度地说,如果原始字符串的长度小于指定的最大长度,则不会出现错误。截断在RadGrid列中的文本

我在网上看到过很多这样的例子,但是看起来使用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,应该是兼容的。

我会挂钩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> 

使用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

使用转换器也适用于此。

<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(); 
    } 
} 

你的代码是好的。只需将“Container.DataItem”更改为“Eval”即可。并保持一切如实。然后尝试一下。我希望这将工作... 所有赌注

现有: <%#ValidateString(的Container.DataItem( “说明”))%>

变化: <%#ValidateString(Eval(“Description”))%>