Обрезать текст в столбце RadGrid - PullRequest
1 голос
/ 19 января 2010

используя Telerik RadGrid * в контексте LINQ, с ASP.NET/C#, как обрезать текст до максимальной длины при отображении в столбцах?Под максимумом я подразумеваю, что если длина исходной строки меньше указанной максимальной длины, ошибки не возникнут.

Я видел много примеров этого в сети, но, похоже, Container.DataItem используется для достиженияэто отличается при использовании LINQ.Иногда мы видим 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 ]

3 голосов
/ 19 января 2010

Я бы подключился к событию 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 голос
/ 20 января 2010

Идея rrrr об использовании события ItemDataBound была хорошим примером. Но, используя собственный запрос с внутренними объединениями для заполнения моей сетки, я не могу использовать свойство 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) + "...";
        }
    }
}

Спасибо рррр кстати!

0 голосов
/ 07 апреля 2014

Ваши коды в порядке. Просто измените «Container.DataItem» на «Eval». И держи все как есть. Тогда попробуй. Я надеюсь, что это будет работать ... Все ставки

Существующий: <% # ValidateString (Container.DataItem ("Описание"))%>

Изменения: <% # ValidateString (Eval ("Описание"))%>

0 голосов
/ 04 июня 2011

Использование конвертера также работает для этого.

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