在datagridview中填充组合框

ssabc

知名会员
已加入
2017年12月11日
留言内容
63
编程经验
10+
你好:

我必须对此稍加注意。

屏幕截图18年11月6日上午11:38 PNG

屏幕截图18年11月11日上午11:43 PNG


谢谢!
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
您仅选择了ProjectNumber字符串,因此dgvstrProjectNumbers是可枚举的<string>(后来的ToList),并且字符串没有'ProjectNumber'属性,字符串列表不需要DisplayMember。

通常,当您设置DisplayMember时,请在分配数据源之前进行设置。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
为什么要直接设置每个单元格的数据源,而不是只为列设置它?

正如JohnH所建议的,DisplayMember应该是数据源或其项目中的属性或列的名称。它是要显示的项目的成员,而不是在项目上调用ToString的结果。您的数据源是一个列表<string>并且该项目及其项都不具有名为的属性或列"ProjectNumber"。如果您要绑定源数据表,则设置DisplayMember是有意义的,例如
comboBoxColumn.DisplayMember = "Name";
comboBoxColumn.ValueMember = "ID";
comboBoxColumn.DataSource = myDataTable;
 

ssabc

知名会员
已加入
2017年12月11日
留言内容
63
编程经验
10+
没有运行时错误,但也没有数据...

我没有运行时错误,但是也没有数据,我忘记了什么?

C#:
                DataTable dt_Employee = timeDataSet.Tables["Employee"];
                DataTable dt_TimeData = timeDataSet.Tables["TimeData"];
                DataTable dt_Activity = timeDataSet.Tables["Activity"];
                DataTable dt_Jobs = timeDataSet.Tables["Jobs"];


                var dgvstrProjectNumbers = from a in dt_Jobs.AsEnumerable()
                                           orderby a.Field<String>("ProjectNumber")
                                           where (a.Field<String>("ProjectNumber") != null)
                                           select a.Field<String>("ProjectNumber");


                int i = 0;


                DataGridViewComboBoxColumn dgvcboProjectNumbers = (DataGridViewComboBoxColumn)(dgvTime.Columns[6]);
                dgvcboProjectNumbers.DataSource=dgvstrProjectNumbers.ToList();


查询数据表没有问题:

屏幕快照06-12-18 at 01.57 PM.PNG

谢谢!
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
假装除了您告诉我们的内容外,我们对您的项目一无所知...因为是这种情况。这:
but also no data
太模糊了。您正在经历多个步骤,因此准确解释与您期望的不同之处很重要。首先,dt_Jobs是否包含数据?如果没有,查询的目的是什么?不要只是假设它确实如此。调试您的代码,并在LINQ查询之前,立即测试该DataTable的Rows.Count属性。
 

ssabc

知名会员
已加入
2017年12月11日
留言内容
63
编程经验
10+
是的,dt_Jobs包含数据...或者我应该说,数据集包含数据。
屏幕截图06-13-18 at 08.24 AM.PNG

屏幕截图06-13-18 at 08.26 AM.PNG

我是否必须执行某种联接查询?认为数据集通过定义的关系来处理这些事情...

谢谢,我希望这更有意义。

ProjectNumber列需要显示在datagridviewcombobox中。
 

ssabc

知名会员
已加入
2017年12月11日
留言内容
63
编程经验
10+
我认为在运行时获取数据没有问题,因为我在其他地方进行数据处理,并且能够轻松填充其他控件。

我认为问题在于在datagridview中填充comboboxcolumn数据源的语法,并且我认为此语法是错误的:

C#:
                DataGridViewComboBoxColumn dgvcboProjectNumbers = (DataGridViewComboBoxColumn)(dgvTime.Columns[6]);
                dgvcboProjectNumbers.DataSource = lstProjectNumbers;

谢谢
 

ssabc

知名会员
已加入
2017年12月11日
留言内容
63
编程经验
10+
关于我以前的帖子,我这里有一些数据,但是我需要能够为这些组合框分配一些查询值(如前所示)!

屏幕截图06-13-18,01.01 PM.PNG

从我所阅读的内容中,我需要首先填充此信息,然后分配tableadapterfill,对吗?

C#:
                DataTable dt_Employee = timeDataSet.Tables["Employee"];
                DataTable dt_TimeData = timeDataSet.Tables["TimeData"];
                DataTable dt_Activity = timeDataSet.Tables["Activity"];
                DataTable dt_Jobs = timeDataSet.Tables["Jobs"];


                var qryProjectNumbers = from a in dt_Jobs.AsEnumerable()
                                        orderby a.Field<String>("ProjectNumber")
                                        where (a.Field<String>("ProjectNumber") != null)
                                        select a.Field<String>("ProjectNumber");


                var lstProjectNumbers = qryProjectNumbers.Distinct().ToList();


                // How do I add combobox columns?
                DataGridViewComboBoxColumn dgvcboProjectNumbers = (DataGridViewComboBoxColumn)(dgvTime.Columns[6]);
                dgvcboProjectNumbers.DataSource = lstProjectNumbers;


                this.timeDataTableAdapter1.Fill(this.timeDataSet.TimeData);

当我运行代码时,尽管这些字段的数据为Nothing,但我也遇到此错误。我假设我需要针对null进行编程。但是,将有查询定义该数据应为什么。

PNG 01.10 PM的屏幕截图06-13-18
 
Last edited:

ssabc

知名会员
已加入
2017年12月11日
留言内容
63
编程经验
10+
为什么事情如此简单,如此耗时?

对不起,我很抱歉,但是我已经花了整整一个星期的时间来弄清楚如何编写三行代码。

真高兴...

C#:
[COLOR=#333333][FONT=Consolas]comboBoxColumn.DisplayMember = "Name";[/FONT][/COLOR]
[COLOR=#333333][FONT=Consolas]comboBoxColumn.ValueMember = "ID";[/FONT][/COLOR]
[COLOR=#333333][FONT=Consolas, Bitstream Vera Sans Mono, Courier New, Courier, monospace]comboBoxColumn.DataSource = myDataTable;


[/FONT]

[FONT = Verdana,Arial,Tahoma,Calibri,Geneva,sans-serif]但是我很难将其与ProjectNumber变量相关联。我也想知道ID在哪里玩。我希望做一个查询,将其转换为一个列表,并让这些值成为combobox数据源的值。

请注意,在我的在线搜索中,这是一个常见问题,但答案很少。

看来我可以直接转到datagridview属性并选择列,然后平移到ProjectNumber列,该列已经是一个组合框。里面有:

数据源,DisplayMember和ValueMamber,全无。项目说收集,但是那里没有数据。如果我可以在这里将查询列表添加到集合中,这会很酷吗?

我开玩笑地更改了数据源,但是没有任何帮助。事实是,这些表都是在TimeData数据集中设置的,如我以前的所有文章中所述。

很抱歉,我没有经验,因为我从未做过。但是我不确定这是火箭科学。应该是三到四行代码。我相信我的查询会奏效。

什么是ValueMember?

什么是DisplayMember?

我已经在网上看到了这些东西,有些人认为一个东西是另一个,另一个是一个,反之亦然。


抱歉,如果我对此信息不清楚。我试图包括尽可能多的信息。

谢谢!





[/字体颜色]
 
最佳 底部