C#创建2行,第一行是文本视图列表,第二行是梳子列表

C#创建2行,第一行是文本视图列表,第二行是梳子列表,第1张

概述我的项目是一个C#应用程序,用于将数据从Excel工作表导入数据库,并提示用户手动映射它们. 我需要创建两行: >第一行是DataGridTextColumn,其中包含excel的标题 适合. >第二行是DataGridComboBoxColumn,其中包含数据库的column_name 每个DataGridTextColumn都有一个组合框. 但我遇到的问题是我无法使DataGridComboB 我的项目是一个C#应用程序,用于将数据从Excel工作表导入数据库,并提示用户手动映射它们.

我需要创建两行:

>第一行是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行,第一行是文本视图列表,第二行是梳子列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存