一个窗口窗体中有两个 datagridview = 无法将数据保存到第二个 datagridview

问题描述 投票:0回答:3
    我创建了一个
  1. winform
  2. 我通过从数据源拖动表格来添加
  3. datagridview 结果:我得到了一个带有 datagridview 和
  4. bindingnavigator
  5. 的 winform
  6. 我通过从数据源拖动另一个表来向同一个 winform 添加第二个 datagridview
  7. 结果:与项目符号 3 相同,但现在有两个 datagridview; 虽然没有添加第二个绑定导航器,但不要问我为什么!
  8. 我复制现有的绑定导航器并将副本调整为第二个数据网格视图
  9. 我查看了 .Designer.cs 文件,它在一致性方面看起来很完美
  10. 现在问题 - 即使两个 datagridview 都有自己的
  11. BindingNavigatorSaveItem_Click
  12. 方法,并且代码指出了各自的绑定源...

    不可能将第二个 datagridview 的更改保存到数据库! Anyone seen this? Any suggestions what to do?

        
c# winforms visual-studio-2008 sql-server-2005 datagridview
3个回答
2
投票
(我感谢dretzlaff17先生/夫人/小姐,他们在我服用兴奋剂的大脑的剩余部分中启动了一些过程)

private void tableMeLikeBindingNavigatorSaveItem_Click(object sender, EventArgs e) { try { this.Validate(); this.tableMeLikeBindingSource.EndEdit(); // IMPORTANT: the following predefined generic Update command // does NOT work (sometimes) // this.tableAdapterManager.UpdateAll(this.rESOURCE_DB_1DataSet); // instead we explicitely points out the right table adapter and updates // only the table of interest... this.tableMeLikeTableAdapter.Update(this.rESOURCE_DB_1DataSet.TableMeLike); } catch (Exception ex) { myExceptionHandler.HandleExceptions(ex); } }

我建议通过使用 DataTable 或对象集合而不是使用绑定导航器在代码中设置 DataGridView 的 DataSource 属性。

0
投票

所以免责声明,我对此很陌生,但希望它能帮助其他正在享受尝试新事物的旅程的人。

0
投票
通常,当您像 John Johnstone 一样执行步骤 1 到 3 时,您会获得 DatabaseDataSet、tablenameBindingSource、

tablename

Tabledapter、tableAdapterManager 和

tablenameBindingNavigator。如果您添加另一个数据网格视图,您会发现第二个数据网格视图缺少它们。

为 Form1 中的两个表添加 datagridview。
  1. 添加另一个表格(Form2)。
  2. 在 Form2 上添加缺少控件的 datagridview。您会注意到它在设计器窗口底部(灰色区域)包含所有内容。
  3. 将此表单(Form2)中缺少的内容从设计器窗口(灰色区域)底部复制并粘贴到 Form1,并使用所有按钮(“+”、“X”保存)取消停靠控件(在设计器表单上) btn 等)对于 Form2 中的 datagridview,将其复制并粘贴到 Form1 中。您必须将 tableAdapterManager 重命名为 tableAdapterManager1。如果您不这样做,表格只会在您单击“+”按钮时更新
  4. 复制Form2中方法中的所有代码并将其放入Form1中的方法中(见下面的代码)。现在应该可以工作了,或者至少对我有用。我将 Visual Studio 2019 与 localDB 一起使用。如果不继续探索,您最终会到达那里并一路学到很多东西。
  5. private void customersBindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); this.customersBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.tempDatabaseDataSet); } private void inventoryBindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); this.inventoryBindingSource.EndEdit(); this.tableAdapterManager1.UpdateAll(this.tempDatabaseDataSet); } private void Form1_Load(object sender, EventArgs e) { this.inventoryTableAdapter.Fill(this.tempDatabaseDataSet.Inventory); this.customersTableAdapter.Fill(this.tempDatabaseDataSet.Customers); }

        
© www.soinside.com 2019 - 2024. All rights reserved.