C# 在代码隐藏中动态绑定DataGridComboxColumn
我有一个datagrid,其中包含一些datagridcombobox列,我正在将xaml中combobox列的绑定源设置为静态资源。但问题是我不知道如何重新绑定itemsSource以获取我对ItemSource所做的最新更改 我的xaml是:C# 在代码隐藏中动态绑定DataGridComboxColumn,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我有一个datagrid,其中包含一些datagridcombobox列,我正在将xaml中combobox列的绑定源设置为静态资源。但问题是我不知道如何重新绑定itemsSource以获取我对ItemSource所做的最新更改 我的xaml是: <Grid > <Grid.Resources> <ObjectDataProvider x:Key="ProductDataProvider" ObjectType="{x:Type local:
<Grid >
<Grid.Resources>
<ObjectDataProvider x:Key="ProductDataProvider" ObjectType="{x:Type local:clsPurchaseOrderList}" MethodName="GetProducts" />
</Grid.Resources>
<my:DataGrid Name="dgvPurchaseOrder"
ItemsSource="{Binding}"
SelectionUnit="CellOrRowHeader"
TabIndex="3">
<my:DataGrid.Columns>
<my:DataGridComboBoxColumn
Width="100"
Header="Product Code"
SelectedValueBinding="{Binding Path=Product_Id,UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Product_Id"
DisplayMemberPath="Product_Code"
ItemsSource="{Binding Source={StaticResource ProductDataProvider}}">
<my:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsEditable" Value="True" />
</Style>
</my:DataGridComboBoxColumn.EditingElementStyle>
</my:DataGridComboBoxColumn>
.
.
.
</my:DataGrid.Columns>
</my:DataGrid>
</Grid>
我的问题是如何将DataGridComboxColumn作为静态资源绑定到代码隐藏中而不是xaml中,因此可以通过调用GetProducts()方法动态绑定ItemSource
编辑:
我的业务目标是:
class clsPurchaseOrderList : INotifyPropertyChanged, IDataErrorInfo
{
public clsPurchaseOrderList()
{
GetProducts();
}
private int _Product_Id;
private ObservableCollection<Products> testCollection;
public int Product_Id
{
get { return _Product_Id; }
set
{
_Product_Id = value;
OnPropertyChanged("Product_Id");
}
}
public ObservableCollection<Products> TestCollection
{
get
{
return this.testCollection;
}
}
public void GetProducts()
{
DataSet ds = new DataSet();
DataTable testTable = new DataTable();
string qry = "select PM.Record_Id as Product_Id,PM.Product_Code,PM.Product_Name,PTM.Product_Type from dbo.Tbl_Product_Master PM join dbo.Tbl_Product_Type_Master PTM on PTM.Record_Id=PM.Product_Category_Id where PM.Is_Del=0 and PM.Is_Active=1";
ds = ObjCommon.GetObject.ExecuteQuery_Select(Connection.ConnectionString, qry);
testTable = ds.Tables[0];
testCollection = new ObservableCollection<Products>();
foreach (DataRow row in testTable.Rows)
{
var obj = new Products()
{
Product_Id = (int)row["Product_Id"],
Product_Code = (string)row["Product_Code"],
Product_Name = (string)row["Product_Name"],
Product_Type = (string)row["Product_Type"]
};
testCollection.Add(obj);
}
this.OnPropertyChanged("TestCollection");
}
}
类clsPurchaseOrderList:INotifyPropertyChanged,IDataErrorInfo
{
public-clorderlist()
{
GetProducts();
}
私人国际产品Id;
私有可观测集合testCollection;
公共int产品标识
{
获取{return\u Product\u Id;}
设置
{
_产品标识=价值;
OnPropertyChanged(“产品标识”);
}
}
公共可观测集合TestCollection
{
得到
{
返回此.testCollection;
}
}
公共产品()
{
数据集ds=新数据集();
DataTable testTable=新DataTable();
string qry=“选择PM.Record\u Id作为产品Id,PM.Product\u代码,PM.Product\u名称,PTM.Product\u类型从dbo.Tbl\u产品主控PM加入dbo.Tbl\u产品类型主控PTM在PTM.Record\u Id=PM.Product\u类别\u Id,其中PM.Is\u Del=0,PM.Is\u Active=1”;
ds=ObjCommon.GetObject.ExecuteQuery\u Select(Connection.ConnectionString,qry);
testTable=ds.Tables[0];
testCollection=新的ObservableCollection();
foreach(testTable.Rows中的DataRow行)
{
var obj=新产品()
{
产品标识=(int)行[“产品标识”],
产品代码=(字符串)行[“产品代码”],
产品名称=(字符串)行[“产品名称”],
产品类型=(字符串)行[“产品类型”]
};
testCollection.Add(obj);
}
此.OnPropertyChanged(“TestCollection”);
}
}
我的xaml是:
<UserControl x:Class="RH_Inventory_Management_System.PURCHASING.Purchase_Order"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<my:DataGrid Name="dgvPurchaseOrder"
ItemsSource="{Binding}"
SelectionUnit="CellOrRowHeader"
TabIndex="3">
<my:DataGrid.Columns>
<my:DataGridComboBoxColumn
Width="100"
Header="Product Code"
SelectedValueBinding="{Binding Path=Product_Id,UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Product_Id"
DisplayMemberPath="Product_Code"
ItemsSource="{Binding Path=TestCollection,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type UserControl}}}">
<my:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsEditable" Value="True" />
</Style>
</my:DataGridComboBoxColumn.EditingElementStyle>
</my:DataGridComboBoxColumn>
.
.
.
</my:DataGrid.Columns>
</my:DataGrid>
</Grid>
.
.
.
我的代码是:
class clsPurchaseOrderList : INotifyPropertyChanged, IDataErrorInfo
{
//Constructor
public clsPurchaseOrderList()
{
GetProducts();
}
private int _Product_Id;
public int Product_Id
{
get { return _Product_Id; }
set
{
_Product_Id = value;
OnPropertyChanged("Product_Id");
}
}
//Method
public DataView GetProducts()
{
DataSet ds = new DataSet();
string qry = "select PM.Record_Id as Product_Id,PM.Product_Code,PM.Product_Name,PTM.Product_Type from dbo.Tbl_Product_Master PM join dbo.Tbl_Product_Type_Master PTM on PTM.Record_Id=PM.Product_Category_Id where PM.Is_Del=0 and PM.Is_Active=1";
ds = ObjCommon.GetObject.ExecuteQuery_Select(Connection.ConnectionString, qry);
if (ds.Tables[0].Rows.Count > 0)
return ds.Tables[0].DefaultView;
else
return null;
}
}
public partial class Purchase_Order : UserControl
{
ObservableCollection<clsPurchaseOrderList> lstItems;
public Purchase_Order()
{
InitializeComponent();
lstItems = new ObservableCollection<clsPurchaseOrderList>();
dgvPurchaseOrder.ItemsSource = lstItems;
}
}
public部分类采购订单:UserControl
{
可观察的收集项目;
公共采购订单()
{
初始化组件();
lstItems=新的ObservableCollection();
dgvPurchaseOrder.ItemsSource=lstItems;
}
}
试试这个
<Grid >
<my:DataGrid Name="dgvPurchaseOrder"
ItemsSource="{Binding}"
SelectionUnit="CellOrRowHeader"
TabIndex="3">
<my:DataGrid.Columns>
<my:DataGridComboBoxColumn
Width="100"
Header="Product Code"
SelectedValueBinding="{Binding
Path=Product_Id,
UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Product_Id"
DisplayMemberPath="Product_Code"
ItemsSource="{Binding Path=TestCollection,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}}}">
<my:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsEditable" Value="True" />
</Style>
</my:DataGridComboBoxColumn.EditingElementStyle>
</my:DataGridComboBoxColumn>
.
.
.
</my:DataGrid.Columns>
</my:DataGrid>
</Grid>
.
.
.
在代码隐藏中,使用可观察的集合绑定组合框
class clsPurchaseOrderList : INotifyPropertyChanged, IDataErrorInfo
{
private int _Product_Id;
public int Product_Id
{
get { return _Product_Id; }
set
{
_Product_Id = value;
OnPropertyChanged("Product_Id");
}
}
private ObservableCollection<ProductBO> testCollection;
public ObservableCollection<ProductBO> TestCollection
{
get
{
return this.testCollection;
}
}
public void GetProducts()
{
DataSet ds = new DataSet();
string qry = "select PM.Record_Id as Product_Id,PM.Product_Code,PM.Product_Name,PTM.Product_Type from dbo.Tbl_Product_Master PM join dbo.Tbl_Product_Type_Master PTM on PTM.Record_Id=PM.Product_Category_Id where PM.Is_Del=0 and PM.Is_Active=1";
ds = ObjCommon.GetObject.ExecuteQuery_Select(Connection.ConnectionString, qry);
DataTable testTable = new DataTable();
testTable = ds.Tables[0];
testCollection = new ObservableCollection<ProductBO>();
foreach(DataRow row in testTable.Rows)
{
var obj = new ProductBO()
{
Product_Code= (string)row["Product_Code"],
ProductNo = (int)row["ProductNo "]
};
testCollection.Add(obj);
}
this.OnPropertyChanged("TestCollection");
}
}
类clsPurchaseOrderList:INotifyPropertyChanged,IDataErrorInfo
{
私人国际产品Id;
公共int产品标识
{
获取{return\u Product\u Id;}
设置
{
_产品标识=价值;
OnPropertyChanged(“产品标识”);
}
}
私有可观测集合testCollection;
公共可观测集合TestCollection
{
得到
{
返回此.testCollection;
}
}
公共产品()
{
数据集ds=新数据集();
string qry=“选择PM.Record\u Id作为产品Id,PM.Product\u代码,PM.Product\u名称,PTM.Product\u类型从dbo.Tbl\u产品主控PM加入dbo.Tbl\u产品类型主控PTM在PTM.Record\u Id=PM.Product\u类别\u Id,其中PM.Is\u Del=0,PM.Is\u Active=1”;
ds=ObjCommon.GetObject.ExecuteQuery\u Select(Connection.ConnectionString,qry);
DataTable testTable=新DataTable();
testTable=ds.Tables[0];
testCollection=新的ObservableCollection();
foreach(testTable.Rows中的DataRow行)
{
var obj=新产品bo()
{
产品代码=(字符串)行[“产品代码”],
ProductNo=(int)行[“ProductNo”]
};
testCollection.Add(obj);
}
此.OnPropertyChanged(“TestCollection”);
}
}
试试这个
<Grid >
<my:DataGrid Name="dgvPurchaseOrder"
ItemsSource="{Binding}"
SelectionUnit="CellOrRowHeader"
TabIndex="3">
<my:DataGrid.Columns>
<my:DataGridComboBoxColumn
Width="100"
Header="Product Code"
SelectedValueBinding="{Binding
Path=Product_Id,
UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="Product_Id"
DisplayMemberPath="Product_Code"
ItemsSource="{Binding Path=TestCollection,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}}}">
<my:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsEditable" Value="True" />
</Style>
</my:DataGridComboBoxColumn.EditingElementStyle>
</my:DataGridComboBoxColumn>
.
.
.
</my:DataGrid.Columns>
</my:DataGrid>
</Grid>
.
.
.
在代码隐藏中,使用可观察的集合绑定组合框
class clsPurchaseOrderList : INotifyPropertyChanged, IDataErrorInfo
{
private int _Product_Id;
public int Product_Id
{
get { return _Product_Id; }
set
{
_Product_Id = value;
OnPropertyChanged("Product_Id");
}
}
private ObservableCollection<ProductBO> testCollection;
public ObservableCollection<ProductBO> TestCollection
{
get
{
return this.testCollection;
}
}
public void GetProducts()
{
DataSet ds = new DataSet();
string qry = "select PM.Record_Id as Product_Id,PM.Product_Code,PM.Product_Name,PTM.Product_Type from dbo.Tbl_Product_Master PM join dbo.Tbl_Product_Type_Master PTM on PTM.Record_Id=PM.Product_Category_Id where PM.Is_Del=0 and PM.Is_Active=1";
ds = ObjCommon.GetObject.ExecuteQuery_Select(Connection.ConnectionString, qry);
DataTable testTable = new DataTable();
testTable = ds.Tables[0];
testCollection = new ObservableCollection<ProductBO>();
foreach(DataRow row in testTable.Rows)
{
var obj = new ProductBO()
{
Product_Code= (string)row["Product_Code"],
ProductNo = (int)row["ProductNo "]
};
testCollection.Add(obj);
}
this.OnPropertyChanged("TestCollection");
}
}
类clsPurchaseOrderList:INotifyPropertyChanged,IDataErrorInfo
{
私人国际产品Id;
公共int产品标识
{
获取{return\u Product\u Id;}
设置
{
_产品标识=价值;
OnPropertyChanged(“产品标识”);
}
}
私有可观测集合testCollection;
公共可观测集合TestCollection
{
得到
{
返回此.testCollection;
}
}
公共产品()
{
数据集ds=新数据集();
string qry=“选择PM.Record\u Id作为产品Id,PM.Product\u代码,PM.Product\u名称,PTM.Product\u类型从dbo.Tbl\u产品主控PM加入dbo.Tbl\u产品类型主控PTM在PTM.Record\u Id=PM.Product\u类别\u Id,其中PM.Is\u Del=0,PM.Is\u Active=1”;
ds=ObjCommon.GetObj