从数据网格获取信息

时间:2017-05-09 06:01:35

标签: c# linq wpfdatagrid

我有一个数据网格,其中包含来自本地数据库的信息。当我点击其中一个选项时,我希望将该信息放入变量并将信息放入文本块中。

我有一些代码,但是选择了'总是返回null。

以下是代码:

private void lbxManagerDisplay_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    ManagerTBL selected = lbxManagerDisplay.SelectedItem as ManagerTBL;

    if (selected != null)
    {
        txtblock_ManagerName.Text = selected.Id.ToString();
    }
}

以下是我填充数据网格的方法

 var PopulateManagers = from m in db.ManagerTBLs
                   where m.ManagerName != null
                   orderby m.TeamName descending
                   select new
                   {
                       ID = m.Id,
                       Manager_Name = m.ManagerName,
                       Nationality = m.ManagerNationality,
                       Team = m.TeamName,
                       Trophies = m.TrophyCount,
                   };
lbxManagerDisplay.ItemsSource = PopulateManagers.ToList();

大家都知道lbxManagerDisplayDataGrid

1 个答案:

答案 0 :(得分:0)

您的问题是您没有选择ManagerTBL类型的对象,但您可以使用以下行从数据库中选择匿名对象:

select new {

因此编译器无法将其强制转换为SelectionChanged事件。

尝试将select语句更改为(我不知道类ManagerTBL的结构,因此我建议您参加整个条目):

var PopulateManagers = from m in db.ManagerTBLs

           where m.ManagerName != null
           orderby m.TeamName descending
           select m;

您也可以只获取一条信息,但如果您想将其转换为特定类型,则需要创建自定义类来存储此信息

public class MTBL_DataContainer
{
    public int ID { get; set; }
    public string Manager_Name { get; set; }
    public string Nationality  { get; set; }
    public string Team { get; set; }
    public int Trophies { get; set; }    
}


var PopulateManagers = from m in db.ManagerTBLs
               where m.ManagerName != null
               orderby m.TeamName descending
               select new MTBL_DataContainer
               {
                   ID = m.Id,
                   Manager_Name = m.ManagerName,
                   Nationality = m.ManagerNationality,
                   Team = m.TeamName,
                   Trophies = m.TrophyCount,
               };
lbxManagerDisplay.ItemsSource = PopulateManagers.ToList();

最后你可以像这样投射它:

private void lbxManagerDisplay_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    MTBL_DataContainer selected = lbxManagerDisplay.SelectedItem as MTBL_DataContainer;

    if (selected != null)
    {
        txtblock_ManagerName.Text = selected.ID.ToString();
    }
}