c# - DataGridView 在单元格退出时提交对数据源的更改,而不仅仅是在 Enter 按键上
问题描述
我的情况类似于以下代码段:
static BindingSource dataTableBindingSource = new BindingSource();
static DataGridView dataGridView = new DataGridView();
private void Form1_Load(object sender, EventArgs e)
{
dataTable.Columns.Add(new DataColumn("Col. 1", typeof(string)));
dataTable.Columns.Add(new DataColumn("Col. 2", typeof(string)));
dataTable.Columns.Add(new DataColumn("Col. 3", typeof(string)));
dataTable.Columns.Add(new DataColumn("Col. 4 (int)", typeof(int)));
dataGridView.AllowUserToAddRows = true;
dataTable.AcceptChanges();
dataTableBindingSource.DataSource = dataTable;
dataGridView.DataSource = dataTableBindingSource;
dataTable.RowChanged += DataTableRowChanged;
}
private static void DataTableRowChanged(object sender, DataRowChangeEventArgs e)
{
dataTable.RowChanged -= DataTableRowChanged;
// Calculations are performed (e.g. autofilling table values)
dataTable.AcceptChanges();
dataTable.RowChanged +=DataTableRowChanged;
}
当用户在编辑单元格后按 Enter 键时,我的代码可以正常工作,但是我需要dataTable.RowChanged
在用户离开单元格后随时发生该事件。
我尝试向 中添加一个事件处理程序dataGridView.CellValueChanged
,它在我需要的任何时候都会被调用。但是,如果用户添加了新行并且dataTable.RowChanged
事件尚未发生(例如,用户按下了 Tab 而不是 Enter),则新行将不会出现在DataTable
. 似乎当用户在DataGridView
控件中创建新行时,整行都保存在某个内部“临时”变量中,直到用户按下回车键或制表符进入新行。理想情况下,我可以告诉在事件DataGridView
中将“临时”新行应用于 DataTable dataGridView.CellValueChanged
,但我找不到实现此目的的方法。我尝试从dataGridView.CellValueChanged
事件中调用以下各项,但均未成功:
faultDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
faultDataGridView.Update();
faultDataGridView.EndEdit();
这个答案提到了 property DataSourceUpdateMode
,这似乎与我的要求相似。不幸的是,我找不到任何解释我将如何设置这个值的来源,或者任何与我正在使用的控件类似的东西
DataTable
我宁愿将我的所有自动填充逻辑保留在一个位置,仅指DataTable
.
解决方案
推荐阅读
- system-verilog - Distinguishing between local data member and child-class data member in an inline constraint
- angular - 当用户通过 Firebase Google 登录身份验证登录到 Angular 应用程序时,在存储用户的电子邮件时面临问题
- ios - ARKit - SceneView Display wrong position 3D Model
- javascript - Node.js datatables editor - How to use a (knex) VIEW that composes a join
- gtk - 来自代码的 CSS?如何直接从 Vala 使用 CSS 装饰?
- sql-server - To remove duplication of data if within 7 days
- html - How to keep a text inside a div when resizing the browser window
- python - 重新映射计数器
- ssh - Cross compilling .deb package for yocto image?i.e remot3.it
- android - 如何在 Android 3D 模型查看器中使用 .bimx 文件