我需要创建两行:
>第一行是DataGrIDTextColumn,其中包含excel的标题
适合.
>第二行是DataGrIDComboBoxColumn,其中包含数据库的column_name
每个DataGrIDTextColumn都有一个组合框.
但我遇到的问题是我无法使DataGrIDComboBoxColumn工作,每次启动应用程序时,第一行正常工作但第二行为空
代码:
foreach (DaTarow row in dt.Rows){ DataGrIDTextColumn dgtc = new DataGrIDTextColumn(); dgtc.MinWIDth = 100; dgtc.CanUserSort = false; dgtc.header = row["Column_name"].ToString(); dg.Columns.Add(dgt); DataGrIDComboBoxColumn dgcbc = new DataGrIDComboBoxColumn(); dgcbc.ItemsSource = columnList; dgcbc.MinWIDth = 100; dg2.Columns.Add(dgcbc);}
xaml:
<DataGrID x:name="dg" HorizontalAlignment="left" Height="29" margin="11,72,0" VerticalAlignment="top" WIDth="579"/> <DataGrID x:name="dg2" HorizontalAlignment="left" Height="30" margin="11,106,0" VerticalAlignment="top" WIDth="579"/>
实时视图:
代码正在运行,但组合框始终显示空字段.
有关为什么DataGrIDComboBoxColumn不适合我的任何帮助?
解决方法 您可能会提到两个问题.第一个是设置dgcbc.ItemsSource = columnList不足以使ComboBox显示可供选择的项目列表.
根据columnList的类型,您需要设置displayMemberPath和SelectedValuePath属性,例如:
var columnList = new Dictionary<string,string>{ { "123","test 123" },{ "aaa","test aaa" },{ "qwe","test qwe" }};dgcbc.ItemsSource = columnList;dgcbc.displayMemberPath = "Key";dgcbc.SelectedValuePath = "Value";
另一个问题是将列绑定到在DataGrID对象上设置的ItemsSource.
dg2.ItemsSource = dt;dgcbc.TextBinding = new Binding(string.Format("[{0}]","Column_name");
您可能还想知道如何在DataGrIDTextColumn中显示文本:
dgtc.Binding = new Binding(string.Format("[{0}]","Column_name");
我不确定这是否是您想要实现的列映射,可能您想修改网格的标题模板并将网格数据显示为下面的文本.为此,请使用DataGrIDTemplateColumn DataGrIDTextColumn列,其标题中包含标题Label和ComboBox.
希望能帮助到你.
编辑:
我准备了一个快速而又脏的代码解决方案.
XAML:
<DataGrID x:name="dg" GrID.Row="0" autoGenerateColumns="False"/>
代码背后:
// data is a rough equivalent of Datatable being imported var data = new List<Dictionary<string,string>> { new Dictionary<string,string> { { "column1","asd asfs af" },{ "column2","45dfdsf d6" },{ "column3","7hgj gh89" } },new Dictionary<string,"aaasdfda" },"45sdfdsf 6" },"78gh jghj9" } },"s dfds fds f" },"4dsf dsf 56" },"78gh jgh j9" } },}; // a List of columns to map to var importToColumns = new List<string> { "123","aaa","qwe","456","bbb" }; importMapPings = new Dictionary<string,int>(); foreach(var column in data[0]) { importMapPings.Add(column.Key,-1); } foreach(var r in importMapPings) { var dgtc = new DataGrIDTextColumn(); dgtc.Binding = new Binding(string.Format("[{0}]",r.Key)); var sp = new StackPanel(); dgtc.header = sp; sp.Children.Add(new Label { Content = r.Key }); var combo = new ComboBox(); sp.Children.Add(combo); combo.ItemsSource = importToColumns; var selectedBinding = new Binding(string.Format("[{0}]",r.Key)); selectedBinding.source = importMapPings; combo.SetBinding(Selector.SelectedindexProperty,selectedBinding); dgtc.MinWIDth = 100; dgtc.CanUserSort = false; dg.Columns.Add(dgtc); } dg.ItemsSource = data; } private Dictionary<string,int> importMapPings;
选择被批准后,importMapPings将包含列的映射列表 – 对于每个导入文件列,它将包含importToColumns列表中元素的索引,如果未选择任何元素,则包含-1.
总结以上是内存溢出为你收集整理的C#创建2行,第一行是文本视图列表,第二行是梳子列表全部内容,希望文章能够帮你解决C#创建2行,第一行是文本视图列表,第二行是梳子列表所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)