【问题标题】:Binding GridView to generic collection using TemplateField使用 TemplateField 将 GridView 绑定到通用集合
【发布时间】:2010-09-16 06:44:04
【问题描述】:

我已将 GridView 绑定到某个列表。在布局中,我创建了以下模板字段:

<asp:TemplateField HeaderText="Phrase">
    <ItemTemplate>
        <asp:TextBox ID="phraseTextBox" runat="server" Text='<%# Bind("Phrase") %>'/>
    </ItemTemplate>
</asp:TemplateField>

但是在更改“短语”列中任何文本框的内容后,我的列表不会反映该更改。

我做错了什么?:)

【问题讨论】:

    标签: .net asp.net data-binding gridview


    【解决方案1】:

    ItemTemplate 将仅用于显示/查看目的。您需要使用 EditItemTemplate 来指定编辑行时 UI 的状态。不仅如此,您还必须向该行添加按钮/链接以将其推入编辑模式。

    阅读来自 MSDN 的 this 文章,该文章解释了如何使用网格视图编辑数据。查看“向编辑界面添加验证控件”部分下的示例以使用 EditItemTemplate。

    【讨论】:

    • 是的,但我需要在不显式切换的情况下使该行可编辑。例如,当用户使我的文本框聚焦时,我们可以隐式切换模式吗?
    • @DixonD,不幸的是 GridView 不适合这种功能。它允许一次编辑一行,因此需要行级别的事件进入编辑模式,然后保存/取消按钮退出模式。
    • 如果 GridView 不足以实现这样的功能,也许你可以建议使用什么?
    • @DixonD - 我不知道有任何这样的内置控件。您希望何时保存数据?我假设您可能想要编辑多行,然后将它们保存在一起。我可能会使用Repeater(或ListView)来生成表格布局。我可能会使用 html 控件(输入而不是文本框)并使用行索引等为它们生成唯一的 id。单击​​保存按钮时,查看 Response.Form 以获取这些控件的值并手动将数据保存到存储中。这是一项相当多的工作。
    【解决方案2】:

    在这一行

    <asp:TextBox ID="phraseTextBox" runat="server" Text='<%# Bind("Phrase") %>'/>
    

    我将使用 Eval 而不是使用 Bind

    <asp:TextBox ID="phraseTextBox" runat="server" Text='<%# Eval("Phrase") %>'/>
    

    问候

    【讨论】:

    • 我认为应该清楚的是我需要完全双向绑定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2011-06-27
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    相关资源
    最近更新 更多