Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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# DataRowView对象在从DataGrid获取值时获取空值_C#_Wpf_Xaml_Datagrid - Fatal编程技术网

C# DataRowView对象在从DataGrid获取值时获取空值

C# DataRowView对象在从DataGrid获取值时获取空值,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,场景是,我想在MouseBoolklick事件上从所选行获取值。我将行强制转换为DataRowView,但对象没有得到任何值。在调试时,当我将光标悬停在SelectedItem上时,它会显示值,但不会将其强制转换为DataRowView。gridview是使用linq from cs代码填充的。没有使用任何数据源 .cs代码: private void _gvDoctorVisit_MouseDoubleClick(object sender, MouseButtonEventArgs e) {

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

.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>

不要使用DataRowView。。。这与WPF的DataGrid无关。你一定在考虑一个不同的框架

如果只需将ItemsSource属性设置为从Linq代码获得的对象集合,即可填充DataGrid上的数据,则SelectedItem的类型将与传入的对象类型相同。所以,你应该能够做到以下几点。(如果你有实际的类,可以随意用它来替换“dynamic”。否则,你可以保持原样。)


快速查看SelectedItem并检查对象的类型。能否发布用于填充DataGrid的代码?
private void _gvDoctorVisit_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    int visitid = ((dynamic)_gvDoctorVisit.SelectedItem).visit_id;
    MessageBox.Show(visitid.ToString());
}