【问题标题】:ASP.NET - Can't save changes from GridView to DatabaseASP.NET - 无法将更改从 GridView 保存到数据库
【发布时间】:2020-06-16 11:28:59
【问题描述】:

我有一个 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();

当我点击“编辑”按钮时,它会在所需的单元格中添加文本框控件,并将 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 == "&nbsp;")
                            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 变量中。它可以工作,但问题仍然存在......用户对这些文本框的输入没有保存到该 Session 变量中,因此当单击“保存”按钮时,它们上不存在任何 textbox.text。

有什么建议吗?

保存按钮的代码与编辑按钮的代码几乎相同,只是不是添加文本框,而是获取 textbox.text 并发送到数据库。

【问题讨论】:

  • 在 btnSave_Click 事件之后您是否收到任何错误?
  • @JordanMahsman 不,没有错误。当我调试它时,GridView 没有文本框......用户在上面写的信息也没有。
  • 我也会发布 btnSave_Click 事件的代码。如果它没有保存文本输入,则该事件一定有问题。
  • @JordanMahsman 这几乎与编辑按钮的代码相同。它不是创建文本框,而是获取 textbox.text。问题是,当方法启动时,它们上没有任何文本框/输入。我想这是因为一旦点击了保存按钮,就会发生回发,所以这些输入被删除了。

标签: c# asp.net gridview


【解决方案1】:

嗯,我需要在明天之前完成这项工作,但我没有找到任何解决方案。所以这就是我要做的,只要它对未来的人有所帮助。

1) 在.aspx中创建隐藏标签

2) 创建一个 javascript 函数,将每个 textbox.text 存储到 label.value(连接)中

3) 将保存按钮 OnClick 更改为 OnClientClick="JavaScriptFunction"

4) 在 .aspx 中使用旧的 Save 按钮 OnClick(调用后端的那个)创建一个隐藏按钮

5) 点击JavaScriptFunction末尾的隐藏按钮

6) 从后端的标签中获取存储的数据

这只是为了避免回发。

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 2013-01-19
    • 2011-10-01
    • 2018-01-19
    • 2019-03-31
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多