簡體   English   中英

GridView事件未觸發

[英]Gridview event not firing

我有一個要求,如果網格視圖中的任何值發生更改,我都必須更新文本框。.我有一個帶有2行的網格視圖..

一個帶有標簽的模板字段,另一個帶有文本框的模板字段...

我的網格視圖看起來像

                   name                 value
                   a                     (empty textbox)
                   b                     (empty textbox)
                   c                      (empty textbox)

現在,當用戶在文本框中輸入一個值時,它應該自動更新與之鏈接的另一個文本框。

我的問題是,當有人在文本框中輸入值時,應該觸發一個事件!

(我從數據庫中獲得名稱a,b,c)。 我不想有一個編輯鏈接或更新鏈接,因為所有要輸入的值都是強制性的!

我嘗試了Grid_SelectedIndexChanged1,但是沒有觸發。.我是否缺少某些東西,或者需要更改以便觸發evant並更新其他文本框?

我是ASP.NET的新手,所以請幫忙!

提前致謝!

如果應該在文本更改時觸發更新,則應使用TextBoxOnTextChanged事件,並將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>

話雖如此,您可能希望相應地標記您的標記,以便其他開發人員知道進行更改時要小心。

編輯

另外,您也可以使用TextBoxonchange事件在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM