2017-04-16 93 views
0

我得到了一个datagridview与客户的信息。我有背景数据,我不代表datagridview。我尝试在datagrid的选定行上获取客户ID。我尝试使用此代码,但在将datagrid.SelectedItem转换为DataViewRow时出错。c#wpf datagridview选择行

这是我的C#代码;

private void searchPayment_btn_Click(object sender, RoutedEventArgs e) 
    { 
     DataRowView drv = (DataRowView)customerDataGrid.SelectedItem; 
     String result = (drv["customer_id"]).ToString(); 
     presenter.getSelecetedCustomerPayment(Convert.ToInt32(result)); 
    } 

在调试模式下,我可以看到customerDataGrid.SelectedItem是正确的。它会返回我所有的数据,包括“customer_id”。

这是我的datagrid的XAML代码;

<DataGrid x:Name="customerDataGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10,10,326,10" AutoGenerateColumns="False" IsReadOnly="True"> 
        <DataGrid.Columns> 
         <DataGridTextColumn Binding="{Binding tc_id_no}" Header="National ID"/> 
         <DataGridTextColumn Binding="{Binding firstname}" Header="Name"/> 
         <DataGridTextColumn Binding="{Binding lastname}" Header="Lastname"/> 
         <DataGridTextColumn Binding="{Binding group_name}" Header="Group"/> 
         <DataGridTextColumn Binding="{Binding birthdate}" Header="Birthdate"/> 
         <DataGridTextColumn Binding="{Binding parent_name}" Header="Parent Name"/> 
         <DataGridTextColumn Binding="{Binding phone_number}" Header="Phone"/> 
         <DataGridTextColumn Binding="{Binding email}" Header="Email"/> 
         <DataGridTextColumn Binding="{Binding gender}" Header="Gender"/> 
        </DataGrid.Columns> 
       </DataGrid> 

回答

1

SelectedItemProperty返回您DataGrid的(第一)当前选择的项目。这意味着这是你类的一个对象(这就是我想要的类的名字),没有DataRowView或类似的东西。如果您投射选定的项目,您可以简单地获得您的Customer的任何属性。请注意,您必须检查所选择的项目是零,因为没有选择的项目是可能的:

Customer selectedCustomer = customerDataGrid.SelectedItem as Customer; 
if (selectedCustomer != null) 
{ 
    //Get the properties you need 
    string selectedCustomerId = selectedCustomer.Id; 
} 
0

试试这个: DataRowView的行=(DataRowView的)DataGrid.SelectedItems [0];

0是第一个交集中的第一个项目,尝试通过试错方法获取索引,继续播放索引,直到获得所需的索引。