我尝试使用DataTable
中的值填充DataGridView
。
代码:
Data::DataTable^ dataTable = gcnew Data::DataTable;
int rows = dataGridView1->RowCount;
int cols = dataGridView1->ColumnCount;
for (int iZeilen= 0; iZeilen < rows; iZeilen++ ){
Data::DataRow^ row = dataTable->Rows->Add() ;
row->ItemArray[dataGridView1->RowCount];
for (int iSpalten= 1; iSpalten = cols; iSpalten++) {
row->ItemArray[iSpalten] = (dataGridView1[iZeilen, iSpalten]) ;
}
dataTable->Rows->Add(row);
}
编译器没有问题,但在执行期间有一个Exception,它说:
索引超出范围数组
在线:
row->ItemArray[iSpalten] = (dataGridView1[iZeilen, iSpalten]) ;
有人可以告诉我哪个数组是什么意思?
答案 0 :(得分:0)
这里发生了一些问题。
row->ItemArray[iSpalten]
超出范围时,您的嵌套循环才会退出。否则它将永远不会结束,因为您的条件语句是一个赋值:iSpalten = cols
。可能是一个简单的错误或复制粘贴错误。如果dataGridView1的列数多于行数,则会得到确切的错误。示例:
Data::DataTable^ dataTable = gcnew Data::DataTable;
int rows = dataGridView1->RowCount; // Let's say this is 3.
int cols = dataGridView1->ColumnCount; // Let's say this is 5.
for (int iZeilen= 0; iZeilen < rows; iZeilen++ )
{
Data::DataRow^ row = dataTable->Rows->Add();
row->ItemArray[dataGridView1->RowCount]; // 3 items in row->ItemArray
for (int iSpalten= 1; iSpalten = cols; iSpalten++) // iSpalten = 5, always.
{
row->ItemArray[iSpalten] = (dataGridView1[iZeilen, iSpalten]); // Access row->ItemArray[5] = error, index out of range
}
dataTable->Rows->Add(row);
}
虽然与您的运行时错误无关,但您会发现您的dataTable未按您的喜好填写。访问数组时,数组[row,col]通常是正确的。但是对于DataGridView来说,它恰恰相反:dgv [col,row]。因此,此行row->ItemArray[iSpalten] = (dataGridView1[iZeilen, iSpalten]);
实际应为row->ItemArray[iSpalten] = (dataGridView1[iSpalten, iZeilen]);
。我不知道为什么这是dgv的惯例,我也不喜欢它,但它就是它。
此行row->ItemArray[dataGridView1->RowCount];
可能应为row->ItemArray[dataGridView1->ColumnCount];
,因为您要将dgv的单行的所有值添加到dataTable的单行。这意味着每列都有一个项目。
这可以为您提供您想要的结果。希望它有所帮助。