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

标签 c# sql winforms datagrid

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

enter image description here

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

DialogResult res = MessageBox.Show("Are you sure you want to apply changes?", "Confirm", MessageBoxButtons.YesNo);
        if (res == DialogResult.Yes)
        {
            foreach (DataGridViewRow row in dgMain.SelectedRows)
            {
                DataTable d = dgMain.DataSource as DataTable;
                long attendanceid = Convert.ToInt64(row.Cells["Attendance_Id"].Value.ToString());
                EmployeeAttendance a = new EmployeeAttendance();
                a.ProcAccountingAttendance_Update(attendanceid);
            }               
            MessageBox.Show("Changes Successfully Saved!");
        }

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

最佳答案

第一个问题是你正在经历 selectedRows仅这意味着如果您更改了多个值,并且毕竟您只选择了一行,那么只有那一行会被更新。

下一个问题是您要遍历所有选定的行,有更改的行和没有更改的行。

如果我处在你的位置,我会这样做:

  • 像这样创建公共(public)类:

类(class):

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

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

关于c# - 在 DataGrid 上编辑多个单元格然后保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49207392/

相关文章:

c# - 为什么我不能覆盖我的接口(interface)方法?

c# - ZedGraph C# 条形图 - 如何检查鼠标单击了哪个条形图?

mysql - 客户多于平均水平的城市。子查询

c# - 将表单大小调整限制为水平

c++ - 在 vista+ 系统的 windows 服务中创建对话框

Winforms登录应用程序示例?

c# - 将位图转换为 OpenCvSharp IplImage

c# - 是否可以在变量名 .net Web API 中使用破折号字符?

java - 按 varchar 字段中存储的整数值对表进行排序

sql - 从给定数据列表中查询最新记录