DataRowView在处理SelectedCellsChanged时返回null

时间:2013-10-10 05:07:44

标签: c# wpf linq datagrid

我一直在尝试处理WPF DataGrid控件的 SelectedCellsChanged 事件,以便能够在其行的选择事件之一上从DataGrid填充一些字段。 当我使用Ado.net并将数据作为DataTable绑定到网格时,它在之前的项目中运行良好。 但是当我开始使用Linq并将数据绑定为var或列表时,就出现了问题。

这是我填写网格的代码:

private void fill_data_grid()
   {
       var items = from it in dc.items
                   orderby it.date_added descending
                   select it;
       dg_items.ItemsSource = items;
   }

这是我要处理其单元格选择事件的DataGrid的 XAMl 代码

<DataGrid  Margin="374,133,10,61" x:Name="dg_items"     
SelectedCellsChanged="dg_items_SelectedCellsChanged" 
Loaded="dg_items_Loaded">                    
</DataGrid>

这是事件处理程序:

private void dg_items_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
   {
       try
       {
           DataRowView _DataView = this.dg_items.CurrentCell.Item as DataRowView;
           //Problem Happens up here ***************************************
           if (_DataView != null)
           {
               txt_code.Text = _DataView.Row["code"].ToString();
               txt_name_ar.Text = _DataView.Row["name_ar"].ToString();
               txt_name_en.Text = _DataView.Row["name"].ToString();
               txt_international_code.Text = _DataView.Row["icode"].ToString();
               txt_supplier_name.Text = _DataView.Row["supplier"].ToString();
               cb_supplierType.Text = _DataView.Row["supplier_type"].ToString();
               cb_producer_comp.Text = _DataView.Row["producer_company"].ToString();
               cb_producer_comp.Text = _DataView.Row["medical_group"].ToString();
               cb_material.Text = _DataView.Row["material"].ToString();
               txt_restrictions.Text = _DataView.Row["restrictions"].ToString();
               txt_side_effects.Text = _DataView.Row["side_effects"].ToString();
               cb_bigUnit.Text = _DataView.Row["bigger_unit"].ToString();
               cb_smallUnit.Text = _DataView.Row["small_unit"].ToString();
               cb_medical_shape.Text = _DataView.Row["pharma_type"].ToString();
               dp_production_date.Text = _DataView.Row["date_produced"].ToString();
               dp_expire_date.Text = _DataView.Row["date_expire"].ToString();
               txt_amount_of_unit.Text = _DataView.Row["amount_in_unit"].ToString();
               cb_item_type.Text = _DataView.Row["cat"].ToString();
               txt_notes.Text = _DataView.Row["notes"].ToString();
               txt_price_per_unit.Text = _DataView.Row["price"].ToString();
               txt_reduction_main.Text = _DataView.Row["main_reduction"].ToString();
               txt_reduction_extra.Text =_DataView.Row["extra_reduction"].ToString();
               txt_tax.Text = _DataView.Row["tax"].ToString();
               txt_amount_of_units.Text = _DataView.Row["amount"].ToString();
             txt_limit_of_reordering.Text=_DataView.Row["limit_of_order"].ToString();
               txt_quick_access.Text = _DataView.Row["quick_access_code"].ToString();
           }
       }
       catch (Exception ex)
       {
           MessageBox.Show(ex.ToString());
       }
   }

将当前单元格项的实例作为 DataRowView

时,会出现问题
  

DataRowView _DataView = this.dg_items.CurrentCell.Item as DataRowView;

DataView为null,尽管CurrentCell.Item在其列中包含值。

我使用ADO.Net尝试了相同的代码并且它有效..

以下代码是我以前的ADO.Net代码

private void FillDataGrid()
   {
       UserDAO doa = new UserDAO();
       dataGrid1.ItemsSource = doa.GetEmps().DefaultView;
   }

GetEmp()返回DataTable。

所以我不知道为什么在选择DataGrid的行时它会给出null。谁能知道为什么?

由于

0 个答案:

没有答案