Как получить Datagrid SelectedItem - PullRequest
0 голосов
/ 13 ноября 2018

Я хотел бы получить значение, хранящееся в первой ячейке моего DataGrid.Как я могу разобрать это значение, когда кто-то нажмет на обновление Button на моем 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();
}

1 Ответ

0 голосов
/ 13 ноября 2018

Это должно работать, если 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 установлено значение 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;
        //...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...