将DataGridView绑定到DataTable后,如何在编辑DataGridView单元格后更新对象数据?

时间:2020-05-28 23:40:54

标签: c# winforms datagridview

第一次张贴。很抱歉,如果我发布的代码格式不正确或难以解释。

我试图弄清楚如何更新位于DataGridView中的类对象“ AnalogInput”中的对象属性数据,该类的DataSource属性设置为DataTable。因此,在DataGridView中编辑一个单元格之后,我想将该更新后的值发送回DataTable,从而发送回AnalogInput属性值。

我正在尝试在WinForms应用程序中执行此操作。

下面是一些代码,这些代码总结了我现在的位置:

创建一个DataGridView来显示一些选择和可编辑的AnalogInput属性

DataGridView dataGridView_AnalogPoints = new dataGridView(); 

使用如下所示初始化公共字符串属性的类对象“ AnalogInput”创建新实例

AnalogInput point = new AnalogInput() { Name = "Something", Address = "2", Minimum = "-32768", Maximum = "32767"};

创建一个新的DataTable来保存对象“ AnalogInput”的所需属性

DataTable analogPoints = new DataTable();

将列添加到数据表

analogPoints.Columns.Add("Name");
analogPoints.Columns.Add("Address");
analogPoints.Columns.Add("Minimum");
analogPoints.Columns.Add("Maximum");

将对象数据添加到DataTable AnalogPoints中的新行

analogPoints.Rows.Add(point.Name, point.Address, point.Minimum, point.Maximum);

设置dataGridView的源。

dataGridView_AnalogPoints.DataSource = analogPoints;

因此,一旦我编辑了包含来自DataSource的对象数据作为DataTable的DataGridView单元(它从AnalogInput对象获取数据),如何将其更新为DataGridView的新输入值?我觉得我离实现这一目标还很遥远。

我只有大约9个月的使用C#和WinForms的经验,所以如果我的代码看起来很乱,我深表歉意。我也不确定要解决的问题。

1 个答案:

答案 0 :(得分:0)

我认为您离实现预期的目标并不遥远。 DataGridView类有一个很棒的事件,叫做CellValueChanged。如果您不知道事件是什么,请将其想像为开发人员认为可能发生的事情(例如值更改,控件被单击,鼠标悬停等),希望允许您订阅要调用的方法每当发生这种情况。 您希望做的是在单元格值更改时运行一个函数。要将方法预订给事件,您需要编写以下代码行:

objectInstanceName.EventName += MethodName; // subscribes a method to be invoked when event occurs

这不一定与您的情况有关,但是如果您不再希望调用您先前订阅的方法,则可以使用以下代码行取消订阅:

objectInstanceName.EventName -= MethodName; // unsubscribes a method to cancel it from being invoked when event occurs

您还可以根据需要预订任意数量的方法。请注意,每个事件都希望预订的事件的方法具有指定的返回类型,参数数量及其类型(这些参数由称为委托的事物指定)。

要创建与期望的返回类型和参数匹配的方法,您可以在键入+ =后立即按两次TAB键,Visual Studio会自动为您生成一个方法,或编写该方法的名称,然后将其悬停在鼠标,打开建议菜单,然后单击“生成方法”。

CellValueChanged事件“希望”其预订的方法具有以下参数(它们的名称无关紧要,重要的是它们的顺序和类型):

object sender, DataGridViewCellEventArgs e

参数 sender 是导致调用该方法的对象(即您的DataGridView),而 e 的类型为DataGridViewCellEventArgs,它具有一些非常有用的属性对您有所帮助:RowIndex和ColumnIndex。使用这些参数,您可以简单地更新DataTable的值,也可以更新实际的AnalogPoint实例,以防您将其分配给某个对象。