从数据网格获取信息



我有一个数据网格,里面装满了来自本地数据库的信息。当我单击这些选项之一时,我想将该信息放入变量中并将信息放入文本块中。

我有一些代码,但是"选定"总是返回一个空值。

这是代码:

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

您的问题是您没有选择类型 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();
    }
}

最新更新