从数据网格获取信息

Getting information from a datagrid

我有一个数据网格,其中填充了来自本地数据库的信息。当我单击其中一个选项时,我想将该信息放入一个变量并将该信息放入一个文本块中。

我有一些代码,但是 'selected' 总是 returns 为空。

代码如下:

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();

让大家知道lbxManagerDisplay是一个DataGrid

你的问题是你没有 select 类型 ManagerTBL 的对象,但是你 select 来自你的数据库的匿名对象,这一行:

select new {

所以编译器不可能在SelectionChanged事件中强制转换它。

尝试将 select 语句更改为(我不知道 class ManagerTBL 的结构,所以我建议采用整个条目):

var PopulateManagers = from m in db.ManagerTBLs

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

你也可以只取一条信息,但是如果你想把它转换成一个特定的类型你需要做一个自定义class来存储这个信息

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();
    }
}