[英]Gridview event not firing
我有一個要求,如果網格視圖中的任何值發生更改,我都必須更新文本框。.我有一個帶有2行的網格視圖..
一個帶有標簽的模板字段,另一個帶有文本框的模板字段...
我的網格視圖看起來像
name value
a (empty textbox)
b (empty textbox)
c (empty textbox)
現在,當用戶在文本框中輸入一個值時,它應該自動更新與之鏈接的另一個文本框。
我的問題是,當有人在文本框中輸入值時,應該觸發一個事件!
(我從數據庫中獲得名稱a,b,c)。 我不想有一個編輯鏈接或更新鏈接,因為所有要輸入的值都是強制性的!
我嘗試了Grid_SelectedIndexChanged1,但是沒有觸發。.我是否缺少某些東西,或者需要更改以便觸發evant並更新其他文本框?
我是ASP.NET的新手,所以請幫忙!
提前致謝!
如果應該在文本更改時觸發更新,則應使用TextBox
的OnTextChanged
事件,並將AutoPostBack
設置為true。
編輯
為避免重復工作,使用上述方法,您可以使用Pankaj Garg在其答案中概述的技術來查找行索引:
int rowIndex = ((GridViewRow)((TextBox)sender).NamingContainer).RowIndex;
這種方法最大的警告是,它不能原諒標記的更改。 如果將TextBox
包裝在另一個實現INamingContainer
,則上面的示例將中斷。 例如:
<asp:TemplateField>
<asp:Panel ID="Panel1" runat="server"> <!-- becomes the naming container -->
<asp:TextBox ID="TextBox1" runat="server" onchange='valueChanged(<%# Container.ItemIndex %>);' />
</asp:Panel>
</asp:TemplateField>
話雖如此,您可能希望相應地標記您的標記,以便其他開發人員知道進行更改時要小心。
編輯
另外,您也可以使用TextBox
的onchange
事件在JavaScript中觸發回發:
<script type="text/javascript">
valueChanged = function(rowIndex){
__doPostBack("<%= GridView1.ClientID %>", rowIndex);
}
</script>
<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...>
<Columns>
<asp:TemplateField>
<asp:TextBox ID="TextBox1" runat="server" onchange='valueChanged(<%# Container.ItemIndex %>);' />
</asp:TemplateField>
</Columns>
</asp:GridView>
在后面的代碼中,重寫RaisePostBackEvent
方法,並將更新邏輯放在此處:
protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
base.RaisePostBackEvent(source, eventArgument);
if (source == GridView1)
{
int rowIndex = int.Parse(eventArgument);
TextBox txt = GridView1.Rows[rowIndex].FindControl("TextBox1") as TextBox;
if (txt != null)
{
var id = (int)GridView1.DataKeys[rowIndex]["ID"];
var text = txt.Text.Trim();
//update the database
}
}
}
您可以如下所示檢查當前行索引...
((GridViewRow)((TextBox)sender).NamingContainer).RowIndex
為OnTextChanged
事件創建一個處理程序,並將AutoPostBack Property True
設置為AutoPostBack Property True
。
protected void TextBox_TextChanged(object sender, EventArgs e)
{
int CurrentGridIndex = ((GridViewRow)((TextBox)sender).NamingContainer).RowIndex
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.