以编程方式在Master-Detail DataGridView的WinForms主网格中选择一行并更新Detail DataGridView

wgeznvg7  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(109)

我有一个Windows窗体应用程序,它在Master-Detail DataGridView中显示信息,该应用程序是根据https://learn.microsoft.com/en-us/dotnet/framework/winforms/controls/create-a-master-detail-form-using-two-datagridviews中的说明编写的。
数据显示正确,选择主DataGridView上的行将在详细DataGridView中显示预期的数据。
我尝试做的是在加载页面时传递一个整数,以便DataGridViews显示时选择正确的主行并显示相应的详细行。
到目前为止,我可以通过传入整数来选择正确的Master行,但是仍然需要单击该行来显示正确的详细信息行。
下面是表单的构造函数:

public PalletList(User user, int orderId)
    {
        _user = user;
        InitializeComponent();
    }

在Load()方法中,我填充DGV并获取它们的数据。然后:

foreach (DataGridViewRow row in ordersDataGridView.Rows)
  {
      if ((int)row.Cells["Id"].Value == orderId)
      {
        row.Selected = true;
        ordersDataGridView.FirstDisplayedScrollingRowIndex = row.Index;
      }
  }
ru9i0ody

ru9i0ody1#

将DataGridViewRow的Selected属性设置为true不会更改BindingSource的Position属性或BindingSource的Current项。这是有意义的,因为DataGridView可以有多个选定的行(SelectedRows Property)。
DataGridView公开了一个CurrentCell属性,该属性将更新BindingSource的Position属性。
因此,您应该设置`DataGridView.CurrentCell以反映所需的行,或者设置BindingSource.Position属性以引起绑定中的更改。

bkhjykvo

bkhjykvo2#

在load方法中,我替换了row.Selected = true; return ordersDataGridView.CurrentCell = row.Cells[“PO”];- user 8575187 2018年11月7日16:55

相关问题