【问题标题】:Change selected DataGridView row given an entity给定实体更改选定的 DataGridView 行
【发布时间】:2013-02-27 11:48:10
【问题描述】:

我有一个 DataGridView,其 DataSource 设置为一个 BindingSource 控件,该控件绑定到一个 ObservableList 实体。

我将此网格用作只读网格,用于搜索目的。 当一个项目被选中时,另一个 BindingSource 将更新为当前选定的项目。 在此之前没有问题。

问题是在创建新项目时,我想在 DataGrid 中选择新项目,因为在保存后用户应该能够编辑刚刚创建的记录的一些数据。

我该怎么做? 我只能提供实体本身或 ID,但我不知道该怎么做。 我不太习惯使用 Windows 窗体,所以我确定我错过了一些微不足道的解决方案。

【问题讨论】:

    标签: c# winforms entity-framework datagridview


    【解决方案1】:

    您应该将网格的SelectedItem 属性绑定到一个属性,您可以在其中设置您希望选择的实体。不确定,但您可能需要在网格上触发刷新,因为它可能不会自动刷新它的视图。

    【讨论】:

    • DataGridView 没有 SelectedItem 属性。我可以使用的唯一属性是 dataGridView.Rows[0].Selected = true; ,但这意味着我必须遍历所有行,找到记录的 ID,然后选择匹配的行:我希望找到更好的方法。
    • SelectedRows 仅返回选定的行。据我所知是只读的。即使我可以编写此属性,它与循环遍历所有行也没有太大区别。
    【解决方案2】:

    好的,经过一些研究和检查“行”对象,我发现这个解决方案完全符合我的需求。

    如果有人发现这种方法有任何缺陷,请告诉我。

    保存新项目后,我会使用新的主键更新实体,然后调用以下函数:

    private void SelectDataGridItem(Model.MyEntityType selectedItem)
    {
        foreach (DataGridViewRow row in MyDataGrid.Rows)
        {
            var boundItem = (Model.MyEntityType) row.DataBoundItem;
            if (boundItem.Id == selectedItem.Id)
            {
                row.Selected = true;
                break;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2017-12-31
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2023-03-14
      • 2015-12-09
      相关资源
      最近更新 更多