2015-06-24 3 views
1

Недавно я опубликовал вопрос о том, как заполнить 2-мерный массив данными из 7 datagridviews, , каждый из которых содержит 7 строк по 5 столбцов. Enigmativity предоставил мне кусок кода, который отлично поработал, большое спасибо.Заполнение нескольких datagridviews из одного двумерного массива

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 из исходного массива.

Я знаю, как заполнить один datagridview из массива 2d, но не уверен, как заполнить все 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); 
} 

Спасибо заранее.

ответ

0

Как и в случае заполнения массива 2d, вам необходимо выполнить итерацию по элементам управления 7 DataGridView. Вставляя свой код в этот цикл, вы затем изменяете, как далеко ваш внутренний цикл итерации. Вместо повторения rowCount - 1, заполняя один DataGridView со всеми 49 строками, вы перебираете только следующие 7 строк. Перемещая rowIndex за пределы внешнего цикла, он будет «помнить» следующий индекс при прогрессе в каждом представлении.

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) 

Но, если честно он все равно будет выполнять то же самое и создает дополнительную логическую проверку для каждой итерации.

+0

Спасибо OhBeWise, ваш код, похоже, отлично справляется с работой! – dkap

Смежные вопросы