DataRowView对象在从DataGrid

时间:2015-05-04 00:21:16

标签: c# wpf xaml datagrid

场景是我想从选定的行onMouseDoubleClick事件中获取值。我将行转换为DataRowView但该对象没有值。在调试时,当我将光标悬停在SelectedItem上时,它会显示值但不会将其强制转换为DataRowView。使用来自cs代码的linq填充gridview。没有使用数据源。

.cs代码:

private void _gvDoctorVisit_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DataRowView row = _gvDoctorVisit.SelectedItem as DataRowView;
    int visitid = Convert.ToInt32(row.Row["visit_id"]);
    MessageBox.Show(visitid.ToString());
}

.xaml代码:

<DataGrid x:Name="_gvDoctorVisit" AutoGenerateColumns="False" EnableRowVirtualization="True" Margin="10,118,10,10" RowDetailsVisibilityMode="VisibleWhenSelected" CanUserReorderColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" IsReadOnly="True" HorizontalScrollBarVisibility="Visible" MouseDoubleClick="_gvDoctorVisit_MouseDoubleClick" >
    <DataGrid.Columns>
        <DataGridTextColumn x:Name="visit_idColumn" Binding="{Binding visit_id}" Header="Visit ID" IsReadOnly="True" Width="100"/>
        <DataGridTextColumn x:Name="person_idColumn" Binding="{Binding Patient_name}" Header="Patient Name" IsReadOnly="True" Width="200"/>
        <DataGridTextColumn x:Name="visit_timeColumn" Binding="{Binding visit_time}" Header="Visit Time" IsReadOnly="True" Width="140" />
        <DataGridTextColumn x:Name="visit_typeColumn" Binding="{Binding visit_type}" Header="Visit Type" IsReadOnly="True" Width="733"/>
    </DataGrid.Columns>
</DataGrid>

1 个答案:

答案 0 :(得分:3)

不要使用与WPF的DataGrid无关的DataRowView。你必须考虑不同的框架。

如果只是通过将ItemsSource属性设置为从Linq代码中获取的对象集合来填充DataGrid上的数据,那么SelectedItem的类型将与您传入的对象类型相同。所以,你应该能够做到以下几点。 (如果你有的话,可以随意用你的实际课程替换“动态”。否则,你可以保持原样。)

private void _gvDoctorVisit_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    int visitid = ((dynamic)_gvDoctorVisit.SelectedItem).visit_id;
    MessageBox.Show(visitid.ToString());
}
相关问题