我想将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();
}
}
}
}
答案 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>.