在DataTable aspx.net中添加文本框

时间:2015-03-03 09:24:13

标签: c# asp.net datatable

我想将textBox添加到dataTable行。我不知道该怎么做。是否可以将textBox添加到dataTable?首先它给我这个错误:

  

指数超出范围。必须是非负数且小于   集合。参数名称: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();

            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

作为您的标记代码,我认为您希望Gridview中的Text Box包含一些值,

为此, 首先你的标记是不正确的,正确的是,

<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循环条件是(i <= dtCurrentTable.Rows.Count)
你应该试试这个(i&lt; dtCurrentTable.Rows.Count) 因为行的计数从0开始,这就是为什么你的索引超出范围错误。

答案 1 :(得分:0)

您可以将文本框添加到gridview中,然后从RowDataBound网格方法中的代码中找到它。您的问题很可能是因为您关闭了TemplateField而没有打开它。你需要添加

<asp:TemplateField>

以上

<ItemTemplate>.