Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C选定行中的DataGrid单元格值_C#_Wpf - Fatal编程技术网

C# C选定行中的DataGrid单元格值

C# C选定行中的DataGrid单元格值,c#,wpf,C#,Wpf,在我的示例应用程序中,我使用了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 {

在我的示例应用程序中,我使用了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>
在按钮中单击行中的事件:Artikli mojID=ArtikligrdArtikli.Items[grdArtikli.SelectedIndex];我得到了无效卡斯特例外:

无法将类型为“f_uAnonymousType09[System.Int32,System.String,System.String,System.Int32,System.Single,System.Nullable1[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() 

我想你的问题是

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 };
这是一个匿名类型,然后尝试将其转换回Artikli类型。
如果从查询中删除新字段和特定字段,则可能必须调整绑定,这将允许您再次将其强制转换回来。

在该行上设置断点,然后查看grdArtikli.Items中的内容。在ui中处理数据是个坏主意。您应该看看mvvm。将selecteditem绑定到window viewmodel中的属性并使用该属性。我还建议将模型数据转换为viewmodel并返回,而不是直接向视图公开模型。然后,您可以在某个离散的地方放置任何验证逻辑、视图所需的额外属性等。