首页 > 解决方案 > 如何获取 Datagrid SelectedItem

问题描述

我想获取存储在我的第一个单元格中的值DataGridButton当有人单击我的 xaml上的更新时,我如何解析该值?

Xaml 代码

<DataGrid  Name="GridStream" Style="{StaticResource GridDatabase}" Margin="5" Grid.Row="1" ItemsSource="{Binding}" AutoGenerateColumns="False" >
<DataGrid.Resources>
    <Style TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="Background" Value="Turquoise"/>
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="FontWeight" Value="SemiBold"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="BorderThickness" Value="0,0,1,2"/>
        <Setter Property="BorderBrush" Value="Black"/>
    </Style>
</DataGrid.Resources>
<DataGrid.Columns>
    <DataGridTextColumn Header="Stream Id" Width="*" Binding="{Binding streamid}"  />
    <DataGridTextColumn Header="Stream Name" Width="*" Binding="{Binding streamname}" />
    <DataGridTemplateColumn>
        <DataGridTemplateColumn.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="Action"></TextBlock>                            
            </DataTemplate>
        </DataGridTemplateColumn.HeaderTemplate>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Button Name="BtnUpdateStream" Content="Update" Style="{StaticResource BtnForm}" Click="BtnUpdateStream_Click"/>
                    <Button Name="BtnDeleteStream" Content="Delete" Style="{StaticResource BtnForm}" Click="BtnDeleteStream_Click"/>
                </StackPanel>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

C# 代码段

private void BtnUpdateStream_Click(object sender, RoutedEventArgs e)
{
    int Id = (GridStream.SelectedItem as member).streamid;
    UpdateStream NewForm = new UpdateStream(Id);

    Console.WriteLine("The Id Value : {0} is", Id);
    //MessageBox.Show(Id);

    NewForm.Show();
}

标签: c#wpfdatagrid

解决方案


如果 的 是一个,这ItemsSource应该DataGrid有效IEnumerable<member>

private void BtnUpdateStream_Click(object sender, RoutedEventArgs e)
{
    var x = GridStream.SelectedItem as member;
    if (x != null)
    {
        int Id = x.streamid;
        UpdateStream NewForm = new UpdateStream(Id);
        NewForm.Show();
    }
}

如果没有选择项或当前选择项的类型不是member,则不会显示表单。

如果ItemsSource设置为 a DataView,这应该工作:

var x = GridStream.SelectedItem as DataRowView;
if (x != null)
{
    int Id = Convert.ToInt32(x["streamid"]);
    UpdateStream NewForm = new UpdateStream(Id);
    NewForm.Show();
}

如果您要绑定到IEnumerable匿名类型,则可以使用dynamic关键字

private void BtnUpdateStream_Click(object sender, RoutedEventArgs e)
{
    dynamic x = GridStream.SelectedItem;
    if (x != null)
    {
        int Id = x.streamid;
        //...
    }
}

推荐阅读