在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,应该是兼容的。
答案 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;