从 LINQ 填充的 DataGrid 的 SelectedItem 事件中提取数据
Extract the data from a SelectedItem event from a LINQ filled DataGrid
我在数据库中有一个 table "Cards" table "Cards" 和 "Customers"。 Cards 包含 CustomerID、Number 和 Ammount。之后,我用ADO.NET来利用DataGrid
、TextBox
等
我删除了 DataGrid
和 TextBox
作为搜索条件。按下按钮时,DataGrid
会加载 LINQ:
string searchString = this.CustomerIDTextBox.Text();
using (var ctx = new bdCustomerEntities()){
var result = from t in ctx.Cards
join t_customer in ctx.Customer on t.CustomerID equals t_customer.id
where t.CustomerID == searchString
select new
{
number = t.number,
ammount = t.ammount,
CustomerID = t.Customer.id
};
/*Fill datagrid*/
this.CardsDataGrid.ItemsSource = result.ToList();
}
当我在 CardsDataGrid
到 select 行中创建一个 MouseDoubleClick
事件并填充两个 TextBox
es 时,问题就来了,一个是 Ammount 数据,另一个是另一个是 Number.
我试过这段代码,但它无法在 TextBox
es:
中显示数据
Cards selected = this.cardsDataGrid.SelectedItem as Cards;
this.numberTextBox.Text = selected.Number.ToString();
this.ammountTextBox.Text = seleccionado.Ammount.ToString();
我在 Cards selected = ...
行之后做了一个 MessageBox.Show
来查看 SelectedItem
上的内容,它显示的是这样的:
{number = 13, ammount = 3500 , CustomerID = 1456 }
我的问题是,由于创建的格式,我无法 "extract" SelectedItem
- 也许是 LINQ? - 并将其放入 TextBox
es.
当我对上面的代码进行此更改时,我注意到了一些事情:
Cards selected = (Cards) this.cardsDataGrid.SelectedItem ;
显示:
System.InvalidCastException:Unable to cast object of type
'[System.Int32,System.Int32,System.String]' to type
'bdCustomer.Cards'.
在您的查询结果中,您 return 是匿名类型而不是 Cards 类型,这就是您收到 InvalidCastException 的原因。
您可以 return 来自 DBSet 的卡片类型:
from t in ctx.Cards
join t_customer in ctx.Customer on t.CustomerID equals t_customer.id
where t.CustomerID == searchString
select t;
您的 LINK 正在返回一个匿名类型而不是 Cards
类型,并且在匿名类型和 Cards
类型之间没有可用的转换,这就是错误所在告诉你。
将您的 LINQ 更改为:
var result = from t in ctx.Cards
join t_customer in ctx.Customer on t.CustomerID equals t_customer.id
where t.CustomerID == searchString
select t;
我在数据库中有一个 table "Cards" table "Cards" 和 "Customers"。 Cards 包含 CustomerID、Number 和 Ammount。之后,我用ADO.NET来利用DataGrid
、TextBox
等
我删除了 DataGrid
和 TextBox
作为搜索条件。按下按钮时,DataGrid
会加载 LINQ:
string searchString = this.CustomerIDTextBox.Text();
using (var ctx = new bdCustomerEntities()){
var result = from t in ctx.Cards
join t_customer in ctx.Customer on t.CustomerID equals t_customer.id
where t.CustomerID == searchString
select new
{
number = t.number,
ammount = t.ammount,
CustomerID = t.Customer.id
};
/*Fill datagrid*/
this.CardsDataGrid.ItemsSource = result.ToList();
}
当我在 CardsDataGrid
到 select 行中创建一个 MouseDoubleClick
事件并填充两个 TextBox
es 时,问题就来了,一个是 Ammount 数据,另一个是另一个是 Number.
我试过这段代码,但它无法在 TextBox
es:
Cards selected = this.cardsDataGrid.SelectedItem as Cards;
this.numberTextBox.Text = selected.Number.ToString();
this.ammountTextBox.Text = seleccionado.Ammount.ToString();
我在 Cards selected = ...
行之后做了一个 MessageBox.Show
来查看 SelectedItem
上的内容,它显示的是这样的:
{number = 13, ammount = 3500 , CustomerID = 1456 }
我的问题是,由于创建的格式,我无法 "extract" SelectedItem
- 也许是 LINQ? - 并将其放入 TextBox
es.
当我对上面的代码进行此更改时,我注意到了一些事情:
Cards selected = (Cards) this.cardsDataGrid.SelectedItem ;
显示:
System.InvalidCastException:Unable to cast object of type '[System.Int32,System.Int32,System.String]' to type 'bdCustomer.Cards'.
在您的查询结果中,您 return 是匿名类型而不是 Cards 类型,这就是您收到 InvalidCastException 的原因。
您可以 return 来自 DBSet 的卡片类型:
from t in ctx.Cards
join t_customer in ctx.Customer on t.CustomerID equals t_customer.id
where t.CustomerID == searchString
select t;
您的 LINK 正在返回一个匿名类型而不是 Cards
类型,并且在匿名类型和 Cards
类型之间没有可用的转换,这就是错误所在告诉你。
将您的 LINQ 更改为:
var result = from t in ctx.Cards
join t_customer in ctx.Customer on t.CustomerID equals t_customer.id
where t.CustomerID == searchString
select t;