我想编辑 DataGrid 中的多个单元格,当单击 btnUpdate 时,我编辑的单元格将在数据库中更新。
我已经尝试了 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/