有没有办法在不使用表适配器的情况下实现数据网格视图保存项按钮

本文关键字:数据网 数据 实现 网格 视图 按钮 保存 情况下 适配器 有没有 | 更新日期: 2023-09-27 18:04:00

我目前正在尝试实现 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和SaveItem的NewRowList或UpdateRowList单击我转到每一行并调用Insert/Update方法,如下所示:

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!");
        }
    }

我知道这是一个模棱两可的问题,但如果有人能指出我一个方向,我将不胜感激

有没有办法在不使用表适配器的情况下实现数据网格视图保存项按钮

我决定实现"添加/编辑"表单来插入或编辑新记录。

双击记录时将打开编辑表单,并且添加表单具有"添加项"按钮

这将为我节省很多时间和麻烦...

无论如何,感谢您的建议~陈池

还有另一种方法。您可以删除数据库中的所有相关记录,然后将网格中的所有数据重新插入数据库。因此,您不需要知道哪个是新的/现有的。它将帮助您减少计算和步骤...

不要忘记使用Transaction删除和重新插入。

为行使用Dictionary(Of DataGridView, Boolean) oDic_RowToWasEdited。一旦你更新你的DataGridviews DataSourceeach Row into the DictionaryValue False.每当Cell gets edited change行字典条目to true .

只要你想save to the Database先检查你的dictionary contains the row. If not这意味着您有new Row. If字典contains that key check its value .如果是true你知道你必须update it.

虽然我确信使用数据表 RowState 属性有更好的方法可以做到这一点,我认为这应该让你继续前进。