我有一个数据网格,里面装满了来自本地数据库的信息。当我单击这些选项之一时,我想将该信息放入变量中并将信息放入文本块中。
我有一些代码,但是"选定"总是返回一个空值。
这是代码:
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();
}
}