如何从DataGridView填充datarow-> ItemArray?

时间:2015-02-03 09:21:00

标签: c++ datagridview datarow

我尝试使用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]) ;

有人可以告诉我哪个数组是什么意思?

1 个答案:

答案 0 :(得分:0)

这里发生了一些问题。

  1. 只有当row->ItemArray[iSpalten]超出范围时,您的嵌套循环才会退出。否则它将永远不会结束,因为您的条件语句是一个赋值:iSpalten = cols。可能是一个简单的错误或复制粘贴错误。如果dataGridView1的列数多于行数,则会得到确切的错误。
  2. 示例:

    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);
    }
    
    1. 虽然与您的运行时错误无关,但您会发现您的dataTable未按您的喜好填写。访问数组时,数组[row,col]通常是正确的。但是对于DataGridView来说,它恰恰相反:dgv [col,row]。因此,此行row->ItemArray[iSpalten] = (dataGridView1[iZeilen, iSpalten]);实际应为row->ItemArray[iSpalten] = (dataGridView1[iSpalten, iZeilen]);。我不知道为什么这是dgv的惯例,我也不喜欢它,但它就是它。

    2. 此行row->ItemArray[dataGridView1->RowCount];可能应为row->ItemArray[dataGridView1->ColumnCount];,因为您要将dgv的单行的所有值添加到dataTable的单行。这意味着每列都有一个项目。

    3. 这可以为您提供您想要的结果。希望它有所帮助。