В C# прочитать данные, вводимые пользователем с GridView в
У меня есть gridview, который будет генерировать новую строку, когда пользователь нажмет на нее добавить новую строку.
Но у меня возникла проблема при чтении пользовательского ввода из c#, мне нужно вставить весь пользовательский ввод по строке в мою базу данных.
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { SetInitialRow(); } } private void SetInitialRow() { DataTable dt = new DataTable(); DataRow dr = null; dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); dt.Columns.Add(new DataColumn("Column1", typeof(string))); dt.Columns.Add(new DataColumn("Column2", typeof(string))); dt.Columns.Add(new DataColumn("Column3", typeof(string))); dr = dt.NewRow(); dr["RowNumber"] = 1; dr["Column1"] = string.Empty; dr["Column2"] = string.Empty; dr["Column3"] = string.Empty; dt.Rows.Add(dr); //Store the DataTable in ViewState ViewState["CurrentTable"] = dt; Gridview1.DataSource = dt; Gridview1.DataBind(); } private void AddNewRowToGrid() { int rowIndex = 0; if (ViewState["CurrentTable"] != null) { DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"]; DataRow drCurrentRow = null; if (dtCurrentTable.Rows.Count > 0) { for (int i = 1; i <= dtCurrentTable.Rows.Count; i++) { //extract the TextBox values TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("Date"); TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("Description"); TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("Hours"); drCurrentRow = dtCurrentTable.NewRow(); drCurrentRow["RowNumber"] = i + 1; dtCurrentTable.Rows[i - 1]["Column1"] = box1.Text; dtCurrentTable.Rows[i - 1]["Column2"] = box2.Text; dtCurrentTable.Rows[i - 1]["Column3"] = box3.Text; rowIndex++; } dtCurrentTable.Rows.Add(drCurrentRow); ViewState["CurrentTable"] = dtCurrentTable; Gridview1.DataSource = dtCurrentTable; Gridview1.DataBind(); } } else { Response.Write("ViewState is null"); } //Set Previous Data on Postbacks SetPreviousData(); } private void SetPreviousData() { int rowIndex = 0; if (ViewState["CurrentTable"] != null) { DataTable dt = (DataTable)ViewState["CurrentTable"]; if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("Date"); TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("Description"); TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("Hours"); box1.Text = dt.Rows[i]["Column1"].ToString(); box2.Text = dt.Rows[i]["Column2"].ToString(); box3.Text = dt.Rows[i]["Column3"].ToString(); rowIndex++; } } } } protected void ButtonAdd_Click(object sender, EventArgs e) { AddNewRowToGrid(); } protected void SUBMIT_Click(object sender, EventArgs e) { }
мой html
<asp:gridview ID="Gridview1" runat="server" ShowFooter="true" AutoGenerateColumns="false"> <Columns> <asp:BoundField DataField="RowNumber" HeaderText="No" /> <asp:TemplateField HeaderText="Date"> <ItemTemplate> <asp:TextBox ID="Date" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Training Description"> <ItemTemplate> <asp:TextBox ID="Description" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Hours"> <ItemTemplate> <asp:TextBox ID="Hours" runat="server"></asp:TextBox> </ItemTemplate> <FooterStyle HorizontalAlign="Right" /> <FooterTemplate> <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" onclick="ButtonAdd_Click" /> </FooterTemplate> </asp:TemplateField> </Columns> </asp:gridview> <asp:Button ID="SubmitBtn" runat="server" Text="Submit" onclick="SUBMIT_Click" />
Что я уже пробовал:
я пытался читать пользовательский ввод с помощью c#, но держать его держать не могу, не получится цикл, удается читать только строку 1,пожалуйста, направьте меня на это
Arasappan
Is Row генерируется успешно, братан..