我一直在尝试处理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。谁能知道为什么?
由于