2012-10-18 47 views
0

獲取價值與文本框我有內部從ASP.NET GridView的服務器上

我想這個文本框按鈕的值與文本框一個gridview點擊

但我始終接收「0」(默認)值

我認爲這個問題的視圖狀態有關,但我不知道

請告訴我什麼,我做錯了什麼?

的源代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    DataSet dataSet = new DataSet("MyDataSet"); 
    DataTable table = new DataTable(); 
    table.Columns.Add(new DataColumn("NameValue")); 
    table.Columns.Add(new DataColumn("Number")); 
    table.Columns.Add(new DataColumn("NumberValue")); 
    dataSet.Tables.Add(table); 

    DataRow row = dataSet.Tables[0].NewRow(); 
    row[0] = "Name"; 
    row[1] = "0"; 

    dataSet.Tables[0].Rows.Add(row); 

    this.MyGridView.DataSource = dataSet; 
    this.MyGridView.DataBind(); 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    TextBox txtsn = ((TextBox)this.MyGridView.Rows[0].FindControl("NumberTextBox")); 
    string sn = txtsn.Text; 
} 




<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
     <asp:GridView ID="MyGridView" AutoGenerateColumns="false" ShowHeader="false" runat="server" > 
      <Columns> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <asp:Label ID="NameLabel" runat="server" Text='<%#Eval("NameValue")%>' /> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <asp:TextBox ID="NumberTextBox" runat="server" Text='<%#Eval("NumberValue")%>' /> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </div> 
    </form> 
</body> 

回答

2

的問題是,你總是綁定網格到它的DataSource甚至上回發。這會覆蓋用戶所做的所有更改。

而是使用IsPostBack屬性:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostback) 
    { 
     DataSet dataSet = new DataSet("MyDataSet"); 
     DataTable table = new DataTable(); 
     table.Columns.Add(new DataColumn("NameValue")); 
     table.Columns.Add(new DataColumn("Number")); 
     table.Columns.Add(new DataColumn("NumberValue")); 
     dataSet.Tables.Add(table); 

     DataRow row = dataSet.Tables[0].NewRow(); 
     row[0] = "Name"; 
     row[1] = "0"; 

     dataSet.Tables[0].Rows.Add(row); 

     this.MyGridView.DataSource = dataSet; 
     this.MyGridView.DataBind(); 
    } 
} 

您需要重新加載DataSource只有當事情被改變(f.e記錄已被刪除或添加,用戶點擊的排序列,或者你有分頁)。但是,你應該只在適當的事件處理程序中做,而不是在page_load中。所以最好將這些代碼封裝在一個你可以從任何地方調用的方法中。

+0

是的,這是我的錯,謝謝 – Garrett

1

你的數據綁定你的網格在回發,這是造成這個問題。您要檢查是否請求是帖子:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostback) 
    { 
     DataSet dataSet = new DataSet("MyDataSet"); 
     DataTable table = new DataTable(); 
     table.Columns.Add(new DataColumn("NameValue")); 
     table.Columns.Add(new DataColumn("Number")); 
     table.Columns.Add(new DataColumn("NumberValue")); 
     dataSet.Tables.Add(table); 

     DataRow row = dataSet.Tables[0].NewRow(); 
     row[0] = "Name"; 
     row[1] = "0"; 

     dataSet.Tables[0].Rows.Add(row); 

     this.MyGridView.DataSource = dataSet; 
     this.MyGridView.DataBind(); 
    } 
} 
+1

謝謝你的幫助 – Garrett