从单个二维数组填充多个datagridviews

时间:2015-06-24 06:12:20

标签: c# arrays datagridview

我最近发布了一个关于如何使用来自7个datagridviews的数据填充二维数组的问题, 每个有7行×5列。 Enigmativity 为我提供了一段非常好的代码,非常感谢。

public string[,] myGridData = new string[50, 5]; 
//49 data rows, last row (50) contains version number

var dgvs = new[] { dgv6, dgv5, dgv4, dgv3, dgv2, dgv1, dgv0, };

for (var i = 0; i < dgvs.Length; i++)
{
  for (int rows = 0; rows < 7; rows++)
  {
    for (int col = 0; col < 5; col++)
    {
     myGridData[rows + i * 7, col] =   dgvs[i].Rows[rows].Cells[col].Value.ToString();
    }
  }
}

我现在需要一种方法来反转过程并从原始数组中填充7个datagridviews。

我知道如何从二维数组中填充单个数据网格视图,但不知道如何填充所有7个网格。 我用来填充1个网格的代码是:

//Populate Single DataViewGrid
var rowCount = myGridData.GetLength(0);
var rowLength = myGridData.GetLength(1);

dgv1.ColumnCount = 5;

for (int rowIndex = 0; rowIndex < rowCount - 1; ++rowIndex)
{
   var row = new DataGridViewRow();

   for (int columnIndex = 0; columnIndex < rowLength; ++columnIndex)
   {
      row.Cells.Add(new DataGridViewTextBoxCell()
      {
        Value = myGridData[rowIndex, columnIndex]
      });
   }

   dgv1.Rows.Add(row);
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

就像填充2d数组一样,您需要遍历7个DataGridView控件。将代码嵌套在该循环中,然后更改内循环迭代的范围。不是迭代rowCount - 1,而是用所有49行填充一个DataGridView,而只迭代接下来的7行。通过将rowIndex移到最外层循环之外,它将会记住&#34;当您浏览每个视图时,下一个索引。

var rowCount = myGridData.GetLength(0);
var rowLength = myGridData.GetLength(1);
int rowIndex = 0;

var dgvs = new[] { dgv6, dgv5, dgv4, dgv3, dgv2, dgv1, dgv0, };

for (int i = 0; i < dgvs.Length; i++)
{
    var dgv = dgvs[i];
    dgv.ColumnCount = 5;

    for (int taken = 0; taken < 7; ++taken, ++rowIndex)
    {
        var row = new DataGridViewRow();

        for (int columnIndex = 0; columnIndex < rowLength; ++columnIndex)
        {
            row.Cells.Add(new DataGridViewTextBoxCell()
            {
                Value = myGridData[rowIndex, columnIndex]
            });
        }

        dgv.Rows.Add(row);
    }
}

如果它让你感觉更好,你可以将内循环修改为:

for (int taken = 0; taken < 7 && rowIndex < rowCount - 1; ++taken, ++rowIndex)

但老实说,它仍然会执行相同的操作,并为每次迭代创建一个额外的逻辑检查。