Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Datagridview:即使用户选择了项,组合框列单元格值也为空_C#_Combobox_Datasource_Cell - Fatal编程技术网

C#Datagridview:即使用户选择了项,组合框列单元格值也为空

C#Datagridview:即使用户选择了项,组合框列单元格值也为空,c#,combobox,datasource,cell,C#,Combobox,Datasource,Cell,我正在构建一个GUI,允许用户操作XML数据。一位名叫Peter的好心人给我指出了一个方向,让我质疑为什么即使用户在组合框中选择了一个值,我的单元格值也为空 我已经阅读了一些内容:comboboxcolumn的值成员、显示成员、数据源和datapropertyname。我已经了解了display和value成员的功能,但决定使用数据源,这样就不必指定display成员和value成员;我相信这会让事情变得更简单,而且组合框中的选项存储在字符串数组中 前提是,用户在富文本框中输入选项。然后,文本框

我正在构建一个GUI,允许用户操作XML数据。一位名叫Peter的好心人给我指出了一个方向,让我质疑为什么即使用户在组合框中选择了一个值,我的单元格值也为空

我已经阅读了一些内容:comboboxcolumn的值成员、显示成员、数据源和datapropertyname。我已经了解了display和value成员的功能,但决定使用数据源,这样就不必指定display成员和value成员;我相信这会让事情变得更简单,而且组合框中的选项存储在字符串数组中

前提是,用户在富文本框中输入选项。然后,文本框逐行读取,每一行都成为组合框中的一个选项。然后在datagridview中创建一个新的combobox列,用户可以选择这些选项。用户完成后,我有一个名为“使用组合列保存…”的按钮,它在datagridview显示的datatable中创建一个新datacolumn,我尝试通过以下代码复制值:(因为我无法直接将组合框列与datatable合并)

int size=dataGridView1.Rows.Count-1;
DataColumn=新的DataColumn(combo.HeaderText);
数据集数组[(int)IndexNumber.Value].Tables[(int)TableNumber.Value].Columns.Add(column);
对于(q=0;q
当所有这些都完成后,将创建新列并显示一条消息。但是,datatable的值为null,这意味着单元格值也为null。这意味着用户在组合框中选择的项目没有复制到单元格值。我做错了什么?我将数据源设置为数组字符串,其中字符串是用户对combobox的选择,但是当我从combobox中选择选项并试图保存时,值为null。我还读到,我不需要担心值成员或显示成员,因为设置数据源将为我提供有效的显示文本和有效值

如果需要任何其他信息,请询问。提前谢谢。 .NET3.5SP1,VisualStudio2008C#

真诚地

tf.rz

我不确定

但是,我认为您会发现datarows是使用旧的列定义创建的

当您添加一个新列时,我怀疑它正在调整每行的数组大小以添加一个列。 虽然如果这是真的,我希望索引超出范围

您需要将那一大行代码分解,以便更容易调试

即当您离开循环时,单元格是否具有您期望的值?还是分配失败了? 它会告诉你哪里出了问题

如果它正在赋值,那么您稍后会丢失数据,然后您需要扩展搜索(例如,如果您以某种方式假定值类型是引用类型,则可能会发生这种情况)

您可能需要创建一个具有正确列定义的新数据表,然后将旧数据复制到新数据表中。。。但首先,您需要确定它失败的地方——您目前在一行代码中做的太多了


你确定你从组合框中得到的值不为空吗?

Hello@John Nicholas,很抱歉回复太晚,但是是的,我进行了调试,当我到达“做很多事情”的那一行时,我得到的只是一个“object reference not set to a instance”异常。我认为新的datatable想法似乎很有道理,有机会的时候我会试试的
            int size = dataGridView1.Rows.Count - 1;
            DataColumn column = new DataColumn(combo.HeaderText);
            data_set_array[(int)IndexNumber.Value].Tables[(int)TableNumber.Value].Columns.Add(column);
            for (q = 0; q < size; q++)
            {
                data_set_array[(int)IndexNumber.Value].Tables[(int)TableNumber.Value].Rows[q][combo.HeaderText] = dataGridView1["combo", q].Value;
            }