我需要在WPF中动态创建一个DataGrid。网格应使用动态生成的控件(组合框,文本框)填充行和列。我需要用三个coulmns和N行填充网格(行数基于XML文件中可用的XML节点)。我将WPF应用程序中的DocumentProperties.XML作为内容。动态创建WPF组合框控件
<DocumentProperties>
<Properties>
<Property Name="DocumentName">
<Id>1</Id>
<Name>DocumentName</Name>
<Type>LogicalOperator</Type>
<Language>en-US</Language>
</Property>
<Property Name="TemplateUsed">
<Id>2</Id>
<Name>TemplateUsed</Name>
<Type>LogicalOperator</Type>
<Language>en-US</Language>
</Property>
....
</Properties>
<Operators>
<Category Type="LogicalOperator">
<Operator value="Equal"></Operator>
<Operator value="NotEqual"></Operator>
</Category>
<Category Type="TimeOperator">
<Operator value="Greater"></Operator>
<Operator value="Smaller"></Operator>
<Operator value="GreaterOrEqual"></Operator>
<Operator value="SmallerOrEqual"></Operator>
</Category>
</DocumentProperties>
在网格中,我需要在Colum1和Column2中创建一个ComboBox。 column1组合将加载XML中可用的Name属性值。根据第一个组合框选择的Type元素值,我需要使用Category节点中的值加载第二个组合框。网格中的3r列应该根据所选属性的类型弹出文本框或Datepikcer。如果XML有6个属性节点,那么网格中的最大行数应为< = 6。以上内容将用于选择高级搜索的属性。
我已经开始从后面的代码创建网格。我已经试过了部分代码如下:
documentPropertyCombo = new ComboBox[drivesCount];
operatorCombo = new ComboBox[drivesCount];
//Load the XML Document
XmlDataProvider xdp = new XmlDataProvider();
XmlDocument doc = new XmlDocument();
doc.Load(".\\Data\\DocumentProperties.xml");
xdp.Document = doc;
xdp.XPath = "DocumentProperties/Properties/Property";
xdp.Document = doc;
drivesGrid.DataContext = xdp;
var binding = new Binding("DocumentProperties/Properties/Property") { Source = xdp };
binding.Mode = BindingMode.OneTime;
// Adding ComboBoxes and TextBoxes to Grid.
for (int i = 0, j = 1; i < drivesCount; i++, j++)
{
//Initialize ComboBox to show Document Property.
//documentPropertyCombo[i] = new ComboBox();
documentPropertyCombo[i] = new ComboBox(); //CreateComboBox(new Thickness(30, 101, 0, 0), i + j, 1);
documentPropertyCombo[i].Width = 101;
documentPropertyCombo[i].Height = 30;
documentPropertyCombo[i].Visibility = Visibility.Visible;
//BindingOperations.SetBinding(myText, TextBlock.TextProperty, myBinding);
documentPropertyCombo[i].IsReadOnly = true;
documentPropertyCombo[i].DisplayMemberPath = "@Name";
BindingOperations.SetBinding(documentPropertyCombo[i], ComboBox.TextProperty, binding);
Grid.SetRow(documentPropertyCombo[i], i + j);
Grid.SetColumn(documentPropertyCombo[i], 1);
drivesGrid.Children.Add(documentPropertyCombo[i]);
...
}
LayoutRoot.Children.Add(drivesGrid);
控件是动态创建的,但该数据未绑定到ComboBox。我是否错过了上面的代码中的任何内容?我假设我可能需要动态地为ComboxBox添加一个DataTemplate。任何人都可以验证上述代码吗?另外我需要知道如何在Column1中为动态创建的comboxBox添加事件,并根据Combo1中的选择更新Column2中的ComboxBoxes的内容?
您能否提供WPF DataGrid的完整命名空间?它是WPFToolKit的一部分/默认情况下是否可用?有几行示例代码将帮助我重新执行我的任务。任何链接到教程也欢迎。 – saravana
http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx –
有一个内置的DataGrid,它附带.Net 4.0 for WPF,但如果您使用的是早于版本的.Net框架需要得到你自己的。 – Rachel