问题描述
||
我正在构建一个允许用户操纵XML数据的GUI。一位名为Peter的很有帮助的同伴向我指出了一个方向,使我质疑为什么即使用户在组合框中选择一个值,我的单元格值仍为空。
我已经阅读了一些内容:comboBoxcolumn的value成员,display成员,数据源和datapropertyname。我已经弄清楚了显示和值成员的作用,但是决定坚持使用数据源,这样我就不必指定显示成员和值成员。我相信它使事情变得容易,并且组合框中的选择都存储在字符串数组中。
前提是,用户将选择输入到富文本框中。然后,逐行读取文本框,并且在组合框中可以选择每一行。然后,我在datagridview中创建一个新的comboBox列,这些选项可供用户选择。完成用户操作后,我有一个名为“保存带有组合列...”的按钮,该按钮将在datagridview显示的数据表中创建一个新的数据列,然后尝试通过以下代码复制值:(因为无法直接将组合框列与数据表合并)
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;
}
说完这些后,将创建新列并显示一条消息。但是,数据表的值为空,这意味着单元格值也为空。这意味着用户在组合框中选择的项目未复制到单元格值中。我究竟做错了什么?我将数据源设置为数组的字符串,其中字符串是用户为组合框选择的选项,但是当我从组合框选择选项并尝试保存它时,该值为null。我还读到我不需要担心值成员或显示成员,因为设置数据源将为我提供有效的显示文本和有效的值。
如果需要任何其他信息,请询问。提前致谢。
.NET 3.5 SP1,Visual Studio 2008 C#。
真诚的
tf.rz
解决方法
我不确定
但是,我认为您会发现数据行是使用旧列定义创建的。
当您添加新列时,我怀疑它是否正在调整每一行的数组大小以添加一列。
虽然如果这是真的,我希望索引超出范围例外。
您需要将大量的代码分解,以便更容易调试。
IE,当您退出循环时,单元格是否具有您期望的值?还是分配失败?
它会告诉您哪里出了问题。
如果正在分配,则稍后会丢失数据,则需要扩大搜索范围(如果您以某种方式假设值类型是引用类型,则可能会发生这种情况)
您可能会确定需要使用正确的列定义创建一个新数据表,然后将旧数据复制到新数据表中……但是首先,您需要确定失败的地方-您当前在一行中做了太多码。
您确定从组合框中获取的值不为null吗?