ASP. NET - Невозможно сохранить изменения из GridView в базу данных - PullRequest
3 голосов
/ 16 июня 2020

У меня есть GridView. В начале у него есть флажок, а остальные столбцы создаются автоматически:

<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();

Когда я нажимаю кнопку «Изменить», он добавляет элементы управления текстовым полем в требуемые ячейки и помещает ячейку .text в текстовом поле .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 в переменной сеанса сразу после создания текстовых полей. И это работает, но проблема остается той же ... пользовательский ввод этих текстовых полей не сохраняется в этой переменной сеанса, поэтому при нажатии кнопки Сохранить на них не существует текстового поля. Текст.

Есть предложения, как это сделать?

Код кнопки «Сохранить» почти такой же, как код кнопки «Изменить», только вместо добавления текстового поля он получит textbox.text и отправит его в базу данных.

1 Ответ

0 голосов
/ 17 июня 2020

Что ж, мне нужно сделать это до завтра, и я не нашел никакого решения. Вот что я собираюсь сделать, только если это кому-то поможет в будущем.

1) Создайте скрытую метку в .aspx

2) Создайте функцию javascript, которая сохраняет каждый textbox.text в label.value (конкатенированный)

3) Измените кнопку Save OnClick на OnClientClick = "JavaScriptFunction"

4) Создайте скрытую кнопку в .aspx со старыми кнопками Save кнопка OnClick (та, которая вызывает бэкэнд)

5) Нажмите скрытую кнопку в конце JavaScriptFunction

6) Получите данные, сохраненные с метки в бэкэнд

Это просто чтобы избежать обратной передачи.

...