代码之家  ›  专栏  ›  技术社区  ›  Nick Larsen

数据绑定时修剪ASP.NET详细信息视图中的值

  •  0
  • Nick Larsen  · 技术社区  · 15 年前

    在编辑模式下,是否有一种简单的方法来修剪细节视图中的值?我尝试修改数据库查询来修剪值,但之后它不喜欢用两种方式进行数据绑定。我试图查看文本框本身的所有属性,但没有发现任何内容。

    我知道我可以为数据绑定事件添加一个事件处理程序,并逐个设置所有值,但这是一个应用程序,在我就业之前就已经存在了,在这个详细信息视图中有40多个值,所有这些值都位于文本框中,这些文本框中的名称看似随机,与它们表示的值或明显的命名方案几乎没有关系。

    我想也许有一种方法可以迭代 DetailsView.Fields 属性,但也找不到任何内容。不允许我更改架构 CHAR VARCHAR 要么。还有其他快速的想法吗?很有可能此页面会再次更改,我希望将来添加的任何新字段都能解决此问题,而无需额外工作。不幸的是,重新设计它现在还不是最重要的,所以我只想找到一个快速的方法来缓解使用这个怪物的一些头痛。

    1 回复  |  直到 14 年前
        1
  •  4
  •   abatishchev Karl Johan    14 年前

    免责声明:我在网格视图上使用过这个,而不是详细视图,但是概念是相同的。

    创建EditItemTemplateField,将数据绑定到文本框,将其转换为字符串,然后修剪字符串。

    <Fields>
        <asp:TemplateField HeaderText="FirstName">
            <EditItemTemplate>
                <asp:TextBox ID="txtFirstName" Runat="server" Text='<%#Bind("FirstName").ToString().Trim() %>'/>
            </EditItemTemplate>
        </asp:TemplateField>
    </Fields>
    

    编辑:这不起作用,因为您不能在绑定数据时执行转换,只有在使用eval时,很不幸。

    另一种方法是在更新detailsView时遍历每个控件。

    void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
    {
        for (int i = 0; i < e.NewValues.Count; i++)
        {
            if (e.NewValues[i] != null)
            {
                e.NewValues[i] = e.NewValues[i].ToString().Trim();
            }
        }
    }
    

    注意,这个示例假定页面上的所有控件都是字符串,如果不是,则必须排除它们。

    推荐文章