如何从数据表中的列读取值列表,数据表中的数据来自xml文件到数据网格中的组合框
本文关键字:数据表 数据 文件 xml 网格 组合 数据网 读取 列表 | 更新日期: 2023-09-27 18:09:17
我有以下xml文件
<WG>
<WGT>
<TName>tanme1</TName>
<Fname>fname1</Fname>
<Product>Product1</Product>
<Product>Product2 </Product>
</WGT>
<WGT>
<TName>tanme2</TName>
<Fname>fname2</Fname>
</WGT>
<WGT>
<TName>tanme1</TName>
<Fname>fname1</Fname>
<Product>Product1</Product>
<Product>Product2 </Product>
<Product>Product3 </Product>
<Product>Product4 </Product>
</WGT>
</WG>
我试图将其绑定到视图中的datagrid (xaml代码)
下面是ViewModel类中的代码片段。
private DataTable dt;
public DataTable DT
{
get
{
return dt;
}
set
{
dt = value;
NotifyPropertyChanged("DT");
}
}
XmlReader xmlFile = XmlReader.Create("C:/Wafers/WGen.xml", new XmlReaderSettings());
DataSet ds = new DataSet();
ds.ReadXml(xmlFile);
dt = ds.Tables[0];
当运行wpf项目时,在视图中我只能看到"TName"answers"Fname"字段和值。
我想通过绑定在数据网格中的组合框中显示产品值列表。如何检索所有的产品值列表从数据表dt在视图模型类,以便我可以绑定它在视图?
创建一个datagridtemplatecoluml:
<DataGridTemplateColumn Header="Product" Width="Auto" MinWidth="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="YourModel">
<ComboBox
ItemsSource="{Binding Path=Products}"
SelectedValuePath="Key"
DisplayMemberPath="Key"
SelectedItem="{Binding SelectedValue, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
ItemSource是一个包含模型产品键和值的字典。
添加:
Dictionary<string, string> Products{ get; set; }
您可以从dataTable创建自定义DataGrid:
1。Xaml:
<DataGrid x:Name="DataGrid" Grid.Column="0" Grid.Row="0"
ItemsSource="{Binding GenericDataView}"
attachedBehaviors:DataGridColumnsBehavior.BindableColumns="{Binding GridColumns}"
AutoGenerateColumns="False"
EnableRowVirtualization="False"
/>
2。填写数据表3.创建GridColumnsCollection和DataView:
GridColumns = new ObservableCollection<DataGridColumn>();
public DataView GenericDataView { get; private set; }
4。遍历数据表行并创建自定义列,下面是动态创建ComboBoxColumn的示例:
ItemsProducts = new ObservableCollection<productModel>();
ItemsProducts = YourProducts
DataGridComboBoxColumn comboBoxColumn = new DataGridComboBoxColumn();
comboBoxColumn.Header = row["displayname"].ToString();
comboBoxColumn.SelectedValuePath = "Key";
comboBoxColumn.DisplayMemberPath = "Value";
Binding binding = new Binding();
binding.Path = new PropertyPath(row["name"].ToString());
comboBoxColumn.SelectedValueBinding = binding;
Binding itemsSourceBinding = new Binding();
itemsSourceBinding.Source = ItemsProducts;
BindingOperations.SetBinding(comboBoxColumn, DataGridComboBoxColumn.ItemsSourceProperty, itemsSourceBinding);
GridColumns.Add(comboBoxColumn);
}
ColumnsList.Add(row["name"].ToString()); //add the real column name
5。在循环所有行并填充数据之后:
RaisePropertyChanged("GridColumns");
GenericDataView = new DataView(dt);
RaisePropertyChanged("GenericDataView");
我想你可以试试这个方法,在dt中你可以得到产品值
财产 private DataView dt;
public DataView DT
{
get
{
return dt;
}
set
{
dt = value;
NotifyPropertyChanged("DT");
}
}
ViewModel:
XmlDocument doc = new XmlDocument();
doc.Load("d:''file.txt");
XmlReader xmlFile = new XmlNodeReader(doc);
DataSet ds = new DataSet();
ds.ReadXml(xmlFile);
DT = ds.Tables[1].AsDataView();
XAML: <ComboBox x:Name="cmbBox" ItemsSource="{Binding DT}" Width="100" Height="100" DisplayMemberPath="Product_Text" SelectedValuePath="WGT_Id"></ComboBox>