从选定的行DataGridView WPF获取值

时间:2018-12-10 14:18:44

标签: c# wpf entity-framework datagridview

我在DataGridView MouseDoubleClick中有一个事件,当我单击任何行时,我想从1列中接收一个值。

我的数据源来自WZ_DWS_SITO类。我创建了一种从数据库中提取数据的方法:

public void getdata()
    {

        EntitiesSito db = new EntitiesSito();

        var query = (from d in db.WZ_DWS_SITO
                     orderby d.WZ_DATA descending
                     group d by new { d.WZ, d.KUNNR, d.WZ_DATA } into grp
                     select new
                     {
                         grp.Key.WZ,
                         grp.Key.KUNNR,
                         grp.Key.WZ_DATA,
                         MATERIAL = grp.Count(),
                     }).ToList();

        datagridview.ItemsSource = query; 

    }

下一步,当我单击行元素时,我想从1列中获取单元格值。

我尝试这个:

var wz = (datagridview.SelectedItem as WZ_DWS_SITO).WZ;

但是不起作用:/我收到一个错误消息:

The object reference has not been set to the instance of the object.

接下来我尝试:

WZ_DWS_SITO wka = (WZ_DWS_SITO)datagridview.SelectedItem;

我得到一个投影错误,直到最后我都不知道发生了什么:/

请帮助:)

1 个答案:

答案 0 :(得分:0)

使用select new关键字后,您将不再处理WZ_DWS_SITO类,而是使用新的匿名关键字。

首先,为您的数据创建一个类:

   public class GroupedData 
   { 
      public string WZ {get; set;} 
      public string KUNNR {get; set;} 
      public string WZ_DATA {get; set;} 
      public int MATERIAL {get; set;} 
   }

然后更改查询:

select new GroupedData()
                     {
                         WZ = grp.Key.WZ,
                         KUNNR = grp.Key.KUNNR,
                         DATA = grp.Key.WZ_DATA,
                         MATERIAL = grp.Count(),
                     }

并使用

GroupedData wka = (GroupedData)(datagridview.SelectedItem);