2011-07-06 161 views
0

我有一个GridView,并在其领域的一个文本框:TextChanged事件没有触发

<asp:GridView ID="NTSBulkEditGridView" runat="server" AutoGenerateColumns="false" AllowSorting="true" Height="500px" 
     DataKeyNames="BookStem" OnRowDataBound="NTSBulkEditGridView_RowDataBound" DataSourceID="NTSSqlDataSource"> 
<Columns> 
    <asp:TemplateField HeaderText="Priority" SortExpression="Priority"> 
     <ItemTemplate> 
      <asp:TextBox ID="txtPriority" runat="server" Text='<%# Eval("Priority") %>' BorderStyle="None" Width="80%" OnTextChanged="TextBox_Changed" AutoPostBack="true"></asp:TextBox> 
      <asp:CompareValidator ID="PriorityCompareValidator" runat="server" ControlToValidate="txtPriority" Display="Dynamic" ErrorMessage="Priority must be an integer!" Text="*" Operator="DataTypeCheck" Type="Integer" ValidationGroup="InsertUpdateNewTitlesStatusValidation" ></asp:CompareValidator> 
     </ItemTemplate> 
    </asp:TemplateField> 

...

你能告诉我,为什么TextBox_Changed()不会被调用,当我更改文本并按Enter键?我试图在GridView外部放置同样类型的TextBox,并且在那里工作。 谢谢。

+1

我不相信它是有效的ItemTemplate块内。而且看起来你的ID会被重复和破坏。 – Joe

+1

@Joe Tuskan不,不会重复。它会根据控制树自动计算 – VMAtm

+1

@Joe Tuskan ID不会影响gridviews的处理。真正的问题是他想要如何处理这些数据,因为这可能会迫使他执行除TextChanged以外的其他操作。他无法用他目前的设计知道他正在编辑哪一行。正如@saeed所说, –

回答

1

ASP.NET TextBox的TextChanged翻译为blur JavaScript事件。当输入元素的文本发生更改并且输入元素失去焦点时,会发生blur。尝试更改文字,但不要按Enter。只需点击TAB键即可进入下一个字段。它发回邮件吗?

更新:

嗯,我看到了那个链接。两件事情。首先,如果你注意到,它可以追溯到2005年和ASP.NET 2.0,我们都知道在计算机世界中的6年意味着60年。所以那篇文章现在已经过时了。其次,有时一种模式只存在于文章中,而你很少在真实的生产系统中看到它。您在网络上看到过多少批量操作?他们有什么类型?以Gmail或雅虎邮件为例。您可以将20或30或X个电子邮件标记为一次读取。但是,你能一步回复20封邮件吗?不,只是因为它没有意义。我从来没有在网络世界的文本框中看到过批量操作。我认为你最好坚持使用AJAX,更好的性能和更多的用户接受度。 :)

+0

不,它不。 – dpreznik

+0

然后让我们看看你的业务是什么?你能解释一下你想做什么吗?例如,“我想让用户编辑他们的电子邮件地址”,或者“我想提供薪水字段的内嵌编辑功能”。因为可能有更好更有效的方法:) –

+0

好吧,我想使用我在这里找到的BulkEditGridView:http://blogs.msdn.com/b/mattdotson/archive/2005/11/09/real-world- gridview的散装-editing.aspx。该GridView是从常见的GridView派生的。我需要能够一次编辑多个字段。该GridView处理更改并将更改后的GridViewRows存储在列表中。我注意到文本更改处理程序从不被调用。然后我决定简化场景并制作你看到的代码。而且它也不处理文本更改。 – dpreznik