ASP.NET - 无法将更改从 GridView 保存到数据库
ASP.NET - Can't save changes from GridView to Database
我有一个 GridView。开头有个Checkbox,其他列自动生成:
<asp:GridView ID="DailyData"
EmptyDataText="No data."
CssClass="data-grid"
HeaderStyle-CssClass="HeaderText"
Width="100%"
Visible="true"
runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox runat="server" />
</ItemTemplate>
<HeaderStyle Font-Bold="True" />
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnEdit" OnClick="btnEdit_Click" Text="Editar" runat="server" />
<asp:Button ID="btnSave" OnClick="btnSave_Click" Text="Guardar" runat="server" />
DailyData.AutoGenerateColumns = true;
DailyData.DataSource = dataTable;
DailyData.DataBind();
当我单击 "Edit" 按钮时,它会在所需的单元格中添加文本框控件,并将 cell.text 放在 textbox.text 上:
protected void btnEdit_Click(object sender, EventArgs e)
{
if (DailyData.Rows.Count > 0)
{
int checks = 0;
foreach (GridViewRow gvr in DailyData.Rows)
{
CheckBox check = gvr.Cells[0].Controls[1] as CheckBox;
if (check.Checked == true)
{
foreach (DataControlFieldCell cell in gvr.Cells)
{
if (!cell.ContainingField.HeaderText.Contains("DATE") &&
!cell.ContainingField.HeaderText.Contains("ID") &&
!cell.ContainingField.HeaderText.Contains("CP") &&
!cell.ContainingField.HeaderText.Equals(""))
{
string texto = cell.Text;
if (texto == " ")
texto = "";
cell.Text = "";
TextBox txt = new TextBox();
txt.Text = texto;
cell.Controls.Add(txt);
}
}
checks++;
}
}
if (checks == 0)
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "popup", "alert('There isn't any row checked')", true);
}
}
}
当我尝试保存那些文本框(用户已编辑)的信息时出现问题。当我单击“保存”按钮时,GridView 的单元格中没有任何文本框控件。
我试图在创建文本框后立即将 GridView 保存到 Session 变量中。它有效,但问题仍然存在......用户对这些文本框的输入未保存到该会话变量中,因此当单击“保存”按钮时,它们上不存在任何 textbox.text。
请问有什么建议吗?
保存按钮的代码与编辑按钮的代码几乎相同,只是不是添加文本框,它会得到 textbox.text 并发送到数据库。
好吧,我需要在明天之前完成这项工作,但我还没有找到任何解决方案。所以这就是我要做的,如果它能帮助将来的人。
1) 在.aspx中创建隐藏标签
2) 创建一个 javascript 函数,将每个 textbox.text 存储到 label.value(串联)
3) 将 Save 的按钮 OnClick 更改为 OnClientClick="JavaScriptFunction"
4) 在 .aspx 中使用旧的保存按钮 OnClick(调用后端的按钮)创建一个隐藏按钮
5) 点击JavaScriptFunction末尾的隐藏按钮
6) 后台获取标签存储的数据
那只是为了避免回发。
我有一个 GridView。开头有个Checkbox,其他列自动生成:
<asp:GridView ID="DailyData"
EmptyDataText="No data."
CssClass="data-grid"
HeaderStyle-CssClass="HeaderText"
Width="100%"
Visible="true"
runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox runat="server" />
</ItemTemplate>
<HeaderStyle Font-Bold="True" />
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnEdit" OnClick="btnEdit_Click" Text="Editar" runat="server" />
<asp:Button ID="btnSave" OnClick="btnSave_Click" Text="Guardar" runat="server" />
DailyData.AutoGenerateColumns = true;
DailyData.DataSource = dataTable;
DailyData.DataBind();
当我单击 "Edit" 按钮时,它会在所需的单元格中添加文本框控件,并将 cell.text 放在 textbox.text 上:
protected void btnEdit_Click(object sender, EventArgs e)
{
if (DailyData.Rows.Count > 0)
{
int checks = 0;
foreach (GridViewRow gvr in DailyData.Rows)
{
CheckBox check = gvr.Cells[0].Controls[1] as CheckBox;
if (check.Checked == true)
{
foreach (DataControlFieldCell cell in gvr.Cells)
{
if (!cell.ContainingField.HeaderText.Contains("DATE") &&
!cell.ContainingField.HeaderText.Contains("ID") &&
!cell.ContainingField.HeaderText.Contains("CP") &&
!cell.ContainingField.HeaderText.Equals(""))
{
string texto = cell.Text;
if (texto == " ")
texto = "";
cell.Text = "";
TextBox txt = new TextBox();
txt.Text = texto;
cell.Controls.Add(txt);
}
}
checks++;
}
}
if (checks == 0)
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "popup", "alert('There isn't any row checked')", true);
}
}
}
当我尝试保存那些文本框(用户已编辑)的信息时出现问题。当我单击“保存”按钮时,GridView 的单元格中没有任何文本框控件。
我试图在创建文本框后立即将 GridView 保存到 Session 变量中。它有效,但问题仍然存在......用户对这些文本框的输入未保存到该会话变量中,因此当单击“保存”按钮时,它们上不存在任何 textbox.text。
请问有什么建议吗?
保存按钮的代码与编辑按钮的代码几乎相同,只是不是添加文本框,它会得到 textbox.text 并发送到数据库。
好吧,我需要在明天之前完成这项工作,但我还没有找到任何解决方案。所以这就是我要做的,如果它能帮助将来的人。
1) 在.aspx中创建隐藏标签
2) 创建一个 javascript 函数,将每个 textbox.text 存储到 label.value(串联)
3) 将 Save 的按钮 OnClick 更改为 OnClientClick="JavaScriptFunction"
4) 在 .aspx 中使用旧的保存按钮 OnClick(调用后端的按钮)创建一个隐藏按钮
5) 点击JavaScriptFunction末尾的隐藏按钮
6) 后台获取标签存储的数据
那只是为了避免回发。