截断在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”))%>