第一次张贴。很抱歉,如果我发布的代码格式不正确或难以解释。
我试图弄清楚如何更新位于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的经验,所以如果我的代码看起来很乱,我深表歉意。我也不确定要解决的问题。
答案 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实例,以防您将其分配给某个对象。