2015-03-03 150 views
0

我想補充的textBox到dataTable的row.I不知道該怎麼辦that.Is有可能的textBox添加到DataTable首先,它給我這個錯誤:添加文本框

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

這裏是我的代碼:

標記:

<asp:GridView ID="GridView2" runat="server" ShowHeader="false" OnRowDataBound="GridView2_RowDataBound"> 
    <Columns> 
     <ItemTemplate > 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     </ItemTemplate> 
    </asp:TemplateField>      
    </Columns> 
</asp:GridView> 

代碼背後:

private void AddNewRecordRowToGrid() 
{ 
    DataTable dt = new DataTable(); 
    DataRow dr; 
    dt.TableName = "table"; 

    dt.Columns.Add(new DataColumn("Zabeleshka", typeof(TextBox))); 
    dr = dt.NewRow(); 
    dt.Rows.Add(dr); 

    ViewState["marks"] = dt; 

    if (ViewState["marks"] != null) 
    { 
     DataTable dtCurrentTable = (DataTable)ViewState["marks"]; 

     DataRow drCurrentRow = null; 

     if (dtCurrentTable.Rows.Count > 0) 
     { 
      for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
      { 
       TextBox TextBox1 = (TextBox)GridView2.Rows[0].FindControl("TextBox1"); 

       drCurrentRow["Zabeleshka"] = TextBox1.Text; 

       if (dtCurrentTable.Rows[0][0].ToString() == "") 
       { 
        dtCurrentTable.Rows[0].Delete(); 

        dtCurrentTable.AcceptChanges(); 
       } 
       dtCurrentTable.Rows.Add(drCurrentRow); 
       ViewState["marks"] = dtCurrentTable; 

       GridView2.DataSource = dtCurrentTable; 
       GridView2.DataBind(); 

      } 
     } 
    } 
} 
+0

'Textbox'是控制和'Datatable'是在內存中的表持有數據,而不是控制,所以你需要存儲在數據表中的值並綁定將具有相關文本框的gridview。 – 2015-03-03 09:32:24

+0

@RahulSingh現在我該怎麼辦? - 我該如何解決這個問題? – buba 2015-03-03 09:33:35

+0

@RahulSingh例子? – buba 2015-03-03 09:45:53

回答

0

當你的標記代碼我想你想的文本框裏面的GridView包含若干值成,

爲此, 首先您的標記是不正確的,正確的是,

<asp:GridView ID="GridView2" runat="server" ShowHeader="false" OnRowDataBound="GridView2_RowDataBound"> 
    <Columns> 
    <asp:TemplateField> <%-- you have not opened it in your markup --%> 
     <ItemTemplate > 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     </ItemTemplate> 
    </asp:TemplateField>      
    </Columns> 
</asp:GridView> 

並在後面的代碼, 得到文本框的值,你需要

TextBox TextBox1 = (TextBox)GridView2.Rows[0].FindControl("TextBox1"); 

編輯,

在你的代碼,

for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) 
      { 
       TextBox TextBox1 = (TextBox)GridView2.Rows[0].FindControl("TextBox1"); 

       drCurrentRow["Zabeleshka"] = TextBox1.Text; 

for循環的條件是(我< = dtCurrentTable.Rows.Count)
你應該試試這個(我< dtCurrentTable.Rows.Count) 因爲行的計數是從0開始,這就是爲什麼你索引超出範圍錯誤。

+0

我修復了templateField,但它一直給我這個錯誤:索引超出範圍。必須是非負數且小於集合的大小。參數名稱:索引 – buba 2015-03-03 10:21:39

+0

假定您的數據表的行數是8,但是如果您想訪問最後一行,那麼行地址將是行[7]。看到我的回答 – Ejaz47 2015-03-03 11:07:06

+0

現在行不添加 – buba 2015-03-03 12:43:00

0

你可以添加一個文本框到一個gridview沒有問題,然後從RowDataBound網格方法中的代碼中找到它。您的問題很可能是因爲您關閉了您的TemplateField並且尚未打開一個。您需要添加

<asp:TemplateField> 

你上面的

<ItemTemplate>.