我有一个datagridview,显示来自mysql数据库的数据。我还有一个显示相同信息的表单,但此表单使用绑定导航器来显示每条记录。我希望当我双击datagridview中的一行时,会显示带有相关行的绑定导航器表单。我在网上看到了一些代码,它将一个参数传递给了表单的构造函数,但这对我没用,这是我到目前为止在datagridview表单上的内容。
if (this.dataGridView1.CurrentCell != null)
{
DataGridViewRow r = dataGridView1.CurrentRow;
Add_Edit ae = new Add_Edit(r);
ae.Show();
}
这是在这个绑定导航器表单
private DataGridViewRow row;
public Add_Edit(DataGridViewRow row)
{
InitializeComponent();
this.row = row;
}
提前致谢
答案 0 :(得分:0)
您不应该将DataGridViewRow传递给其他表单,因为它不应该知道您正在使用DataGridView(但这是一个高级编程主题)。请改用绑定到DataGridViewRow的对象。
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) {
object item = dataGridView1.Rows[e.RowIndex].DataBoundItem;
Add_Edit ae = new Add_Edit(item);
ae.Show();
}
将Add_Edit的构造函数参数更改为类型对象,因为DataBoundItem将返回一个,并将其分配给用于填充导航器的BindingSource。因为您无法直接设置SelectedItem,所以必须获取该项的BindingSource索引并设置它的Position属性。
public Add_Edit(object item) {
InitializeComponent();
bindingSource1.Position = bindingSource1.IndexOf(item);
}