【问题标题】:Label ItemTemplate inside Gridview在 Gridview 中标记 ItemTemplate
【发布时间】:2009-05-28 10:12:15
【问题描述】:

我只想在 Gridviews ItemTemplate 中显示 100 个字符。当我单击编辑按钮时,我想使用 EditItemTemplate 显示所有绑定值。

<ItemTemplate>

<asp:Label ID="Label2" runat="server" Text='<%# Bind("Address") %>'> </asp:Label>

</ItemTemplate>

如何将标签文本限制为 100 个字符?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    由于您在 ItemTemplate 中工作,因此您实际上不需要使用 Bind()。您可以改用 Eval() 并制作如下内容:

    <%# Eval("Address").ToString().Substring(0, 100) %>
    

    这样一个简单的解决方案有两个问题:

    第一个是地址字段为空时,您必须对其进行检查。第二个是如果字符串短于 100 个字符,它也会失败,因为 .NETs Substring() 试图确保您始终获得正好 100 个字符,如果字符串更短则抛出异常。因此,您应该添加代码以确保您确实需要剪切字符串。

    现在感觉也许我们应该创建一个小辅助方法:

    public static class Extensions
    {
        public static String Limit(this String s, int length)
        {
            if (s == null)
                return String.Empty;
    
            return s.Substring(0, Math.Min(s.Length, length));
        }
    }
    

    那么 Eval 语句将如下所示:

    <%# ((string)Eval("Address")).Limit(100) %>
    

    (这里假设 Address 确实是一个字符串)

    【讨论】:

    • sorry.. 发生错误:错误 2 'object' 不包含 'SubString' 的定义,并且找不到接受类型为 'object' 的第一个参数的扩展方法 'SubString'(你是缺少 using 指令或程序集引用?)
    • 我不确定 Eval 返回什么。尝试制作一个 .ToString().Substring(0, 100) 。而且,是的,String 上没有大写的 S,只是一个错字。
    • "Eval 方法获取数据字段的名称并返回一个字符串,该字符串包含数据源中当前记录中该字段的值。" - 来自msdn.microsoft.com/en-us/library/ms178366.aspx。所以它应该工作。也许这只是导致您的问题的错字。
    • 我刚刚在一个小测试项目中尝试过它,它对我有用。如果我尝试解析的字段为空,它会失败。
    • @Marpe:该语法(编辑后)是准确的。 OP 的错误似乎源于其他问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多