以编程方式更新 Datagridview 单元格值仅将部分更改保存到数据库中



im 在 Windows 窗体应用程序上工作,该应用程序允许用户以编程方式(更新单元格值一次)和手动(逐个更新)更新数据库。该过程在 Maual 更新中运行良好,但是当它尝试以编程方式更新时,只会保存一些更改。

当我在以编程方式更改后查看 datagridview 时,我可以看到值已更改,但是当我关闭程序并再次打开它时,只剩下一些更改。

奇怪的是,当我在关闭列标题之前对值进行排序时(值是日期),某些日期不按顺序排列。这些相同的日期是未保存到数据库中的日期。

我该如何解决这个问题?如何保存所有更改?

这是我的相关代码:

private void save_btn_Click(object sender, EventArgs e)
{
     dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
     string t = "";
     Label l;
     int space;
     for (int c = 1; c < tableLayoutPanel1.ColumnCount; c++)
     {
         for (int r = 1; r < tableLayoutPanel1.RowCount; r++)
         {
             l = (Label)tableLayoutPanel1.GetControlFromPosition(c, r);
             if (l != null)
             {
                 t = l.Text;
                 for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                 {
                    if (dataGridView1[2, i].Value.ToString().Equals(t))
                    {
                        dataGridView1[4, i].Value = GetDate();
                    }
                 }
             }            
         }           
     }
     bindingSource1.EndEdit();
     dataAdapter.Update((DataTable)bindingSource1.DataSource);
     dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
}

编辑:手动更新代码:

  private void saveDB_Btn_Click(object sender, EventArgs e)
        {
            try
            {
                bindingSource1.EndEdit();
                dataAdapter.Update((DataTable)bindingSource1.DataSource);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

将数据网格视图绑定到数据库代码:

 void GetData(string selectCommand)
        {
            try
            {
                dataAdapter = new SqlCeDataAdapter(selectCommand, conn);
                commandBuilder = new SqlCeCommandBuilder(dataAdapter);
                table = new DataTable();
                dataAdapter.Fill(table);
                bindingSource1.DataSource = table;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

尽管您在编辑后添加了其他代码,但很难确切地说出发生了什么,因为仍然缺少一些相关代码,例如 GetDate() 方法、排序代码和 * 中的 TableLayoutPanel 代码。设计器.cs文件。

在调试会话期间很容易找到根本原因;首先,检查是否遗漏了未存储在Label控件中的值(如果有)。这可以通过在第一个if语句中添加一个空的else子句并在那里放置一个断点来完成,看看它是否命中。

第一个 if 语句中的断点可以告诉您是否看到 UI 上显示的所有值。只需在if内放置一个断点并检查Label.Text即可。

最后但并非最不重要的一点是,您可以检查第二个if语句。由于您要将表布局面板的标签文本与 DGV 文本进行比较,因此可能存在不匹配,从而导致某些值无法更新。这可以通过单步执行最内部子句中的代码来完成,并确保应匹配的所有标签确实匹配。

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新