我遇到datagridview问题。
表单1:使用datagridview填充数据...(当我单击datagrid视图行时,相应的行值将转移到另一个表单)
表格2:我有带保存按钮的文本按钮
当我点击datagrid视图行时,值被转移到另一个表单,这是正常工作.....
在表单2中我已对该数据进行了一些更改,但此更改未反映在1 datagrid视图的表单中...
我该如何解决这个问题......
答案 0 :(得分:2)
您的选择很少。将Form1实例传递给Form2并从Form2刷新Form1 DataGridView数据源是一种选择。
例如。 Form2构造函数可以如下所示
Form1 myForm1;
public Form2(Form1 form1)
{
myForm1 = form1;
}
private void SaveButtonClicked()
{
//Refresh the Form1.DataGridView DataSource.
}
<强>方法2 强>
您可以通过在Form2中创建事件来调用方法来刷新Form1中的Form1 DataGridView。
答案 1 :(得分:1)
要回答这个问题,我们必须知道如何将所选GridRow的值传递给另一种形式的控件。
如果您的网格绑定到数据集/数据表,例如,一旦您在UI中选择了一行,并且显示了另一个表单,其中DataGridRow的字段被分解为不同的控件,那么您将哪些对象传递给另一个表单?
我会传递链接到网格中所选行的DataRow,这样在第二种形式中你仍然可以引用数据行,当某人更改文本框中的值时(例如)你可以手动更新datarow列的值与用户输入的新值。
以这种方式,如果在上一个表单中刷新网格,您将看到更改。
请注意这可以通过许多不同的方式完成,如果我可以从头开始编写整个逻辑,我可能不会使用这种方法,但是你说的太少,所以现在不能提出任何建议。
答案 2 :(得分:0)
如果您使用ShowDialog()方法显示Form2,则此调用将暂停Form1,直到Form2未关闭。
这是最简单的方法。 E.g。
Form1 {
UpdateRowMethod() {
DataRow Row = GetSelectedRow()
Form2 frm;
frm = new Form2(Row.Field1, Row.Field2, Row.Field3)
if frm.ShowDialog() = OK {
Row.Field1 = frm.Property1
Row.Field2 = frm.Property2
Row.Field3 = frm.Property3
DataGridView1.InvalidateSelectedRow()
}
}
}
正如您所看到的,Form2接受Row的Field Values作为其构造函数的参数。 Form2通过其属性返回更新的数据。
如果您正在使用Show()方法,那么您需要实现事件/委托,以便通知Form1数据已被更改。
答案 3 :(得分:0)
在Form1中创建一个BindingSource,用它来填充Form1中的DataGridView。在调用之前将BindingSource传递给Form2。您的所有更改都将自动连接进/出。除了BindingSouce属性之外,您不需要公开Form2中的任何属性(如果您不想通过其构造函数传递它)。