1

LINQコンテキストでTelerikRadGrid*を使用し、ASP.NET / C#を使用して、列に表示するときにテキストを最大長に切り捨てる方法は?最大とは、元の文字列の長さが指定された最大長よりも短い場合、エラーが発生しないことを意味します。

ネット上でこれの例をたくさん見てきましたが、これContainer.DataItemを実現するために使用される方法は、LINQを使用する場合とは異なるようです。DataItem方法として見ることもあれば、そうでないこともあります。例では通常、を使用していDataSetます。

見つかった例を次に示します(ソース):

<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

4 に答える 4

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>
于 2010-01-19T16:25:13.247 に答える
1

イベントを使用するという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) + "...";
        }
    }
}

ちなみにrrrrに感謝します!

于 2010-01-20T14:11:37.817 に答える
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();
    }
}
于 2011-06-04T00:07:29.500 に答える
0

あなたのコードは大丈夫です。「Container.DataItem」を「Eval」に変更するだけです。そして、すべてをそのままにしておきます。次に、それを試してみてください。私はそれがうまくいくことを願っています...すべての賭け

既存: <%#ValidateString(Container.DataItem( "Description"))%>

変更点: <%#ValidateString(Eval( "Description"))%>

于 2014-04-07T05:19:55.747 に答える