我正在构建一个允许用户操作XML数据的GUI。一个名叫彼得的有用的人能够指出一个方向,让我质疑为什么即使用户在组合框中选择一个值,我的单元格值也为空。
我已经阅读了一些内容:comboboxcolumn的value成员,显示成员,数据源和datapropertyname。我已经弄清楚显示和值成员做了什么,但决定坚持使用数据源,所以我不必指定显示成员和值成员;我相信它让事情变得更容易,加上组合框中的选择存储在一个字符串数组中。
前提是,用户将选项输入到富文本框中。然后,逐行读取文本框,每行都成为组合框中的选项。然后,我在datagridview中创建一个新的组合框列,并且可供用户选择。用户完成后,我有一个名为“使用组合列保存...”的按钮,它在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,这意味着单元格值也为null。这意味着用户在组合框中选择的项目未复制到单元格值。我究竟做错了什么?我将数据源设置为数组字符串,其中字符串是用户对组合框的选择,但是当我从组合框中选择并尝试保存它时,值为空。我还读到我不需要担心值成员或显示成员,因为设置数据源会为我提供有效的显示文本和有效值。
如果需要任何其他信息,请询问。提前致谢。 .NET 3.5 SP1,Visual Studio 2008 C#。
此致
tf.rz
答案 0 :(得分:1)
我不确定
但是我认为您会发现使用旧的列定义创建了数据行。
当你添加一个新列时,我怀疑它是为每行添加一个列来调整数组的大小。 虽然如果这是真的,我会期望索引超出范围例外。
你需要打破这么大的代码,以便更容易调试。
IE离开循环时,单元格是否具有您期望的值?或者分配失败了? 它会告诉你哪里出了问题。
如果它正在分配然后你丢失了数据,那么你需要扩展你的搜索(如果你以某种方式假设一个值类型是一个引用类型,这可能会发生)
你可能需要创建一个具有正确列定义的新数据表,然后将旧数据复制到新数据中......但首先你需要确定它失败的地方 - 你现在做的太多了1行代码。
你确定从组合框获得的值是不是空?