【发布时间】:2017-01-02 21:44:19
【问题描述】:
我目前正在尝试实现 DataGridView SaveItem 操作...
由于我已经编写了 CRUD 方法并且我没有使用 TableAdapters,我想知道是否有一种聪明的方法可以在不使用适配器的情况下实现 Save。
我目前的做法是在 CellEditEnd 上实现,例如:
private void djelatnikDataGrid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridViewRow gridrow = djelatnikDataGrid.Rows[e.RowIndex];
DataRowView rowview = (DataRowView)gridrow.DataBoundItem;
DataRow row = rowview.Row;
if (row.RowState != DataRowState.Unchanged || djelatnikDataGrid.IsCurrentRowDirty)
{
if (djelatnikDataGrid.Rows.Count == (e.RowIndex+1))
{
djelatnik_ListaNovihRedaka.Add(row);
}
djelatnik_ListaRedakaSaPromjenama.Add(row);
}
}
我想检查记录是新行还是已编辑的现有行,然后我根据 RowIndex 和 SaveItemClick 将它添加到 NewRowList 或 UpdatedRowList 我去 foreach 行并调用这样的插入/更新方法:
private void btnSaveDjelatnik_Click(object sender, EventArgs e)
{
if (DataDirty)
{
foreach (DataRow row in djelatnik_ListaNovihRedaka)
{
Djelatnik djelatnik = new Djelatnik();
djelatnik.ImePrezime = row["ImePrezime"].ToString();
djelatnik.Zvanje = row["Zvanje"].ToString();
djelatnik.RadnoMijesto = row["RadnoMjesto"].ToString();
r.InsertDjelatnik(djelatnik);
}
if (vozilo_ListaRedakaSaPromjenama.Count > 0)
{
foreach (DataRow row in djelatnik_ListaRedakaSaPromjenama)
{
Djelatnik djelatnik = new Djelatnik();
djelatnik.ImePrezime = row["ImePrezime"].ToString();
djelatnik.Zvanje = row["Zvanje"].ToString();
djelatnik.RadnoMijesto = row["RadnoMjesto"].ToString();
r.UpdateDjelatnik(djelatnik);
}
}
MessageBox.Show("Promijene su spremljene u bazu podataka!");
}
}
我知道这是一个模棱两可的问题,但如果有人能指出我的方向,我将不胜感激
【问题讨论】:
-
还有另一种方法。您可以删除数据库中的所有相关记录,然后将网格中的所有数据重新插入数据库。所以你不需要知道哪个是新的/现有的。它将帮助您减少计算和步骤...
-
是的,但这需要很长时间?这是一个真正的解决方案还是解决方法
-
在会计流程中,我们总是这样做的。计算增加或减少的数量需要更多时间和风险。按 ID 删除,然后在网格中重新插入最新数据。加油!
-
我要试试这个...谢谢你的时间
-
如果没问题,请投票给我的评论:D
标签: c# datagridview save