从DataGrid.SelectedItems IList

时间:2016-10-19 20:19:56

标签: c# wpf datagrid

我正在创建一个WPF应用程序,它在DataGrid中显示来自单个SQL数据库表的记录。该应用程序还包括一个TreeView,用于过滤记录以及三个按钮:

  1. 删除所有记录。
  2. 删除超过30分钟的记录。
  3. 删除在DataGrid中选择的记录。
  4. 我被指示使用代码而不是MVVM,因此我的DataGrid绑定发生在各种事件上,例如Window_Loaded," TreeViewItem" _Selected等等......一切正常。至于按钮,第一个是直接的,因为它删除了表中的所有记录,所以我只是发送一个带有TSQL命令的字符串。第二个按钮基本相同,但它正在执行存储过程。第三个按钮和此应用程序的最后一个部分是我被困住的地方。

    显然我需要"匹配"在DataGrid中选择的行到数据库表中的行,我可以使用记录ID来执行,但我面临的挑战是我无法弄清楚如何从所选项列表中提取记录ID。我已经在互联网上搜索了近一个星期了,几乎所有我发现的信息都引用了DataGridView,根据XAML不支持。我创建了以下方法

        private void GetSelectedRecordIds()
        {
            var selectedRows = licenseGrid.SelectedItems;
        }
    

    这将返回带有索引的IList,每个索引显示该行中的值(下面的本地人截图)。

    enter image description here

    这是正确的方法吗? 如果是这样,从" Id"中提取我需要的价值的最佳方法是什么?列?

1 个答案:

答案 0 :(得分:1)

假设您通过将其ItemsCollection绑定到自定义对象的集合来填充DataGrid,您可以将IList转换回强类型对象的IEnumerable,如下所示:

private void GetSelectedRecordIds()
{
    IList selectedRows = (IList)licenseGrid.SelectedItems;
    var stronglyTypedList = selectedRows.Cast<MyType>();

    foreach (MyType m in stronglyTypedList)
    {
        int id = m.ID;
        // do something with ID
    }
}

如果您需要根据这些ID从数据库中删除其他帮助,请告诉我们......