c# - 来自选定行的 C# DataGrid 单元格值
问题描述
在我的示例应用程序中,我使用了 ADO.NET 实体数据模型。
这是我的代码:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
InventoryEntities context;
context = new Inventory.InventoryEntities();
var query = from x in context.Artikli
select new { x.ID, x.Sifra, x.Naziv, x.Kolicina, x.Prodajna, x.Nabavna, x.UkupnoProdajna, x.UkupnoNabavna, x.Slika };
var results = query.ToList();
grdArtikli.ItemsSource = results;
}
private void button_Click(object sender, RoutedEventArgs e)
{
Artikli mojID = (Artikli)grdArtikli.Items[grdArtikli.SelectedIndex];//This line raises error
MessageBox.Show(mojID.ID.ToString());
}
和 XAML:
<Window x:Class="Inventory.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Inventory"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="1600" ResizeMode="NoResize" Loaded="Window_Loaded">
<Grid>
<TabControl x:Name="tabControl" HorizontalAlignment="Left" Height="790" Margin="0,0,0,0" VerticalAlignment="Top" Width="1590">
<TabControl.Effect>
<DropShadowEffect Color="#FF1A36E8"/>
</TabControl.Effect>
<TabItem Header="Artikli" Width="70" FontSize="18" FontWeight="Bold">
<TabItem.Background>
<RadialGradientBrush>
<GradientStop Color="#FFF3F3F3" Offset="0"/>
<GradientStop Color="#FFEBEBEB" Offset="0.5"/>
<GradientStop Color="#FFDDDDDD" Offset="0.8"/>
<GradientStop Color="#FF00E2FF" Offset="1"/>
</RadialGradientBrush>
</TabItem.Background>
<Grid Background="#FFACC383">
<DataGrid x:Name="grdArtikli" HorizontalAlignment="Left" Margin="5,5,0,0" VerticalAlignment="Top" Width="1550" Height="650" Background="#FF78B6EC" BorderBrush="#FF72DA36" Foreground="#FFB91313" AutoGenerateColumns="False" IsReadOnly="True" MouseDoubleClick="grdArtikli_MouseDoubleClick" SelectionChanged="grdArtikli_SelectionChanged" SelectionMode="Single" SelectedIndex="0">
<DataGrid.Columns>
<DataGridTextColumn Width="80" Binding="{Binding ID}" CanUserSort="False" CanUserReorder="False" CanUserResize="False" ClipboardContentBinding="{x:Null}" Header="ID" IsReadOnly="True">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="100" Binding="{Binding Sifra}" ClipboardContentBinding="{x:Null}" Header="Šifra" CanUserSort="False" CanUserReorder="False" CanUserResize="False">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="250" Binding="{Binding Naziv}" ClipboardContentBinding="{x:Null}" Header="Naziv" CanUserSort="False" CanUserReorder="False" CanUserResize="False">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="100" Binding="{Binding Kolicina}" ClipboardContentBinding="{x:Null}" Header="Količina" CanUserSort="False" CanUserReorder="False" CanUserResize="False">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="150" Binding="{Binding Prodajna}" ClipboardContentBinding="{x:Null}" Header="Prodajna Cena" CanUserSort="False" CanUserReorder="False" CanUserResize="False">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="150" Binding="{Binding Nabavna}" ClipboardContentBinding="{x:Null}" Header="Nabavna Cena" CanUserSort="False" CanUserReorder="False" CanUserResize="False">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="150" Binding="{Binding UkupnoProdajna}" ClipboardContentBinding="{x:Null}" Header="Sum Prodajna" CanUserSort="False" CanUserReorder="False" CanUserResize="False">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="150" Binding="{Binding UkupnoNabavna}" ClipboardContentBinding="{x:Null}" Header="Sum Nabavna" CanUserSort="False" CanUserReorder="False" CanUserResize="False">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTemplateColumn CanUserReorder="False" CanUserResize="False" ClipboardContentBinding="{x:Null}" Header="Slika" Width="*">
<DataGridTemplateColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Slika}" Stretch="Fill" Width="Auto" Height="30" x:Name="mojaSlika" Loaded="mojaSlika_Loaded">
</Image>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.DataContext>
<local:Artikli Naziv="0" Sifra="0" UkupnoNabavna="0" UkupnoProdajna="0"/>
</DataGrid.DataContext>
</DataGrid>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="423,693,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
</Grid>
</TabItem>
<TabItem Header="TabItem">
<Grid Background="#FFE5E5E5"/>
</TabItem>
</TabControl>
</Grid>
</Window>
在该行中的 button_click 事件中:Artikli mojID = (Artikli)grdArtikli.Items[grdArtikli.SelectedIndex];
我得到 InvalidCastException:
无法将类型为“<>f__AnonymousType0
9[System.Int32,System.String,System.String,System.Int32,System.Single,System.Single,System.Nullable
1[System.Single],System.Nullable`1[System.Single],System.Byte[]]”的对象转换为类型“Inventory.Artikli”
怎么了?
解决方案
这一行:
select new { x.ID, x.Sifra, x.Naziv, x.Kolicina, x.Prodajna, x.Nabavna, x.UkupnoProdajna, x.UkupnoNabavna, x.Slika };
正在返回一个包含这些字段的匿名对象,这就是列表中的内容。将其更改为实例化一个类,或者不将该项目投影到其他东西。
例如,尝试:
context.Artikli.ToList()
而不是Linq。
推荐阅读
- java - 任务 ':app:mergeDebugResources 问题执行失败
- docker - 在 docker 检查中,“StartedAt”和“FinishedAt”是什么意思?
- python - 如何使用 BERT 进行回归?
- pivot-table - 如何通过 Powershell 在现有数据透视表上设置 xlPivotTableVersion
- java - 字符串 java 的 DateTimeFormatter 类型
- flutter - 如何等到键盘颤抖起来?
- java - Java 并发:机场模拟 - 如何允许飞机同时访问不同的登机口
- sql - Oracle - 获取具有最小值的两列条件的行
- angular - ngx-bootstrap + Angular 12 从另一个组件打开模式
- reactjs - 反应状态数组(第一个输入不起作用)