簡體   English   中英

在Gridview中讀取動態創建的文本框

[英]Read a dynamically created textbox in a Gridview

我正在將文本框動態添加到gridview的某些行(僅一列)。 我用這個測試條件插件添加了控件(可以正常工作):

        TextBox txtASIN = new TextBox();
        txtASIN.ID = "TxtASIN" + e.Row.RowIndex;
        e.Row.Cells[4].Controls.Add(txtASIN);
        int i = e.Row.Cells[4].Controls.Count; //TEST: This returns 1 correctly

我希望用戶能夠在一個或多個這些文本框中輸入值,然后單擊一次按鈕即可更新數據庫(每一行都不要單擊一次)。 我遇到的問題是如何在按鈕單擊事件上訪問這些值。 我用這種方法做了一個簡單的測試,試圖在第二行中看到該值,但在temp1中得到null(我確定在該文本框中輸入了一個值):

    protected void btnUpdate1_Click(object sender, EventArgs e)
    {
        TextBox temp = (TextBox)GridView2.Rows[1].FindControl("txt1");
        string temp1 = temp.Text;
        int i = GridView2.Row.Cells[4].Controls.Count; //TEST: This returns 0 incorrectly        }

一旦可以完成這項工作,就可以遍歷行並執行需要對值進行的操作。 我不知道是否在文本框中輸入的文本在沒有回發的情況下實際上是可讀的,但否則我很困惑。 公開尋求有關如何執行此操作的更好建議。

謝謝。

編輯:這是我現在的位置。 我可以看到我專欄中的文本框。 我在試圖讀取它們的按鈕上插入了一個中斷,這就是我所看到的。 如果我檢查GridView2.Rows [0] .Controls.Count,我得到8,這是正確的列數。 如果我檢查GridVeiw2.Rows [0] .Cells [4] .Controls.Count,我得到0,這是錯誤的,因為文本框在那里。 在動態創建計數后,我可以立即獲得Count值1,但在隨后單擊按鈕時卻不能。

誰能解釋一下? 我覺得如果我能克服這個難題,我可以完成剩下的一切。

再次感謝。

您需要為TextBox控件分配一個ID,然后在FindControl()中通過該ID訪問它們。 另外,請確保要在生命周期的Page的Init()方法中添加控件。 這樣,它將被添加到ViewState。

TextBox txt1 = new TextBox();
txt1.ID = "txt1"; 
e.Row.Cells[4].Controls.Add(txt1);

編輯:我只記得另一個可能的解決方案。 無需以編程方式在背后的代碼中創建TextBox控件,而只需在GridView中創建一個TemplateField。

以編程方式將Textbox TemplateField列添加到GridView

我會嘗試另一種方法,將文本框放在頁面的html標記中,然后在ItemDataBound事件上控制其可見或只讀屬性。 這樣,控件將始終存在,而您不必擔心生命周期問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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