2011-07-06 166 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