如何从DataGridView填充datarow->ItemArray?

How to fill a datarow->ItemArray from a DataGridView?

本文关键字:gt ItemArray datarow- DataGridView 填充      更新时间:2023-10-16

我尝试用DataGridView中的值填充我的DataTable

法典:

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);
}

编译器没有问题,但在执行过程中有一个异常,它说:

索引超出数组范围

行:

row->ItemArray[iSpalten] = (dataGridView1[iZeilen, iSpalten]) ;

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

这里有一些问题。

  1. 嵌套循环仅在超出范围时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);
}
  1. 虽然与运行时错误无关,但您会发现 dataTable 未按预期填充。 当访问数组时,array[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 的单行。 这意味着它每列都有一个项目。

这应该会让你得到你想要的结果。 希望对您有所帮助。