在DataGrid上编辑多个单元格然后保存到数据库

时间:2018-03-10 09:17:10

标签: c# sql winforms datagrid

我想编辑DataGrid中的多个单元格,当单击btnUpdate时,我编辑的单元格将在数据库中更新。

enter image description here

我已经尝试过btnUpdate的ff代码:

pip install "seaborn‑0.8.1‑py2.py3‑none‑any.whl"

但问题是它仍然没有更新数据库。

2 个答案:

答案 0 :(得分:1)

第一个问题是,您只需要selectedRows,这意味着如果您更改了多个值,而且只选择了一行,则只会更新一行。

接下来的问题是你要经历所有选定的行,有变化的行和没有变化的行。

我会在你的位置做的是:

  • 像这样创建公共类:

类:

public class ChangedData
{
    public Object primaryKey;
    public Object columnName;
    public Object columnValue;
}
  • 在表单中创建public List<ChangedData> changedData;
  • 调用cellValidating事件并在其中检查旧值和新值是否不同,如果它们不同则执行changedData.Add(new ChangedData { primaryKey = primaryKeyOfYourTable, columnName = dataGridView1.Columns[e.ColumnIndex].Name, columnValue.FormattedValue });
  • 最后当你按下更新按钮时,你会去

这样:

using(SqlConnection con...)
{
    con.Open();
    using(SqlCommand cmd = new SqlCommand("UPDATE YOURTABLE SET @ColumnName =  @ColumnValue where PrimaryKeyColumn = @PrimaryKey", con);
    {
        cmd.Parameters.Add("@ColumnName");
        cmd.Parameters.Add("@ColumnValue");
        cmd.Parameters.Add("@PrimaryKey");

        foreach(ChangedData cd in changedData)
        {
            cmd.Parameters["@ColumnName"].Value = cd.columnName.ToString();
            cmd.Parameters["@ColumnValue"].Value = cd.columnValue.ToString();
            cmd.Parameters["@PrimaryKey"].Value = cd.primaryKey.ToString();

            cmd.ExecuteNonQuery();
        }
    }
    con.Close();
}

我编写的代码未经测试且需要编辑,因为您尚未向我们提供您拥有的任何代码或数据库结构。如果您需要其他内容,请编辑回答或评论。

答案 1 :(得分:0)

UPDATE :我终于用ff代码解决了这个问题: 顺便说一下,我正在为我的数据库使用存储过程

private void dgMain_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        string id = dgMain.Rows[e.RowIndex].Cells["Attendance_Id"].Value.ToString();
        string columnname = dgMain.Columns[e.ColumnIndex].Name;
        string value = dgMain.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
        EmployeeAttendance a = new EmployeeAttendance();
        a.ProcAccountingAttendance_UpdateByGroupIdDateFromTo(Convert.ToInt64(id),columnname,value);
    }