c# - 如何获取 Datagrid SelectedItem
问题描述
我想获取存储在我的第一个单元格中的值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();
}
解决方案
如果 的 是一个,这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;
//...
}
}
推荐阅读
- android-bluetooth - Android x86 禁用 USB 设备或驱动程序或选择蓝牙设备?
- svg - 重置 svg 模式原点
- npm - npm安装的“yarn add global”更新包可以吗?
- python - 根据其他列修改数据框列中的值
- typescript - 如何优雅地初始化 TypeScript 中的一系列对象?
- mysql - char_length() 和 character_length() 有什么区别
- python - 如何获取最大列值计数
- amazon-web-services - 如何通过cloudformation添加密码参数字段而不显示值?
- java - XML 存在时不存在
- c++ - 现在如何获得 gcc3.2?