Практическое руководство.Порядок SelectedCells

Я работаю над приложением c#, которое содержит много пустых DataGridViews. Пользователь должен заполнить их копией / вставкой данных из excel. Я делаю следующее:

int i = 0;
string s = Clipboard.GetText();

// Separate lines
string[] lines = Regex.Split(s, "rn");
foreach (string line in lines)
{
    // Separate each cell
    string[] cells = line.Split('t');
    foreach (string cell in cells)
    {
        // If we selected as many cells as copied
        if (dataGridView.SelectedCells.Count == (lines.Length-1)*(cells.Length))
        {
            dataGridView.SelectedCells[i].Value = cell;
            i++;
        }
    }
}

проблема в том, что если я скопирую что-то вроде этого (в excel):

1   2   3
4   5   6

мой datagridview будет выглядеть так:

6   4   2
5   3   1

Я не знаю, что делать, чтобы исправить это... Заранее спасибо

2 ответов


заменить

dataGridView.SelectedCells[i].Value = cell;

С

dataGridView.SelectedCells[(dataGridView.SelectedCells.Count-1) - i].Value = cell;


  1. преобразуйте данные буфера обмена в 2-мерный массив. Запомните длину каждого измерения.
  2. выполните итерацию по выбранным ячейкам и найдите верхние левые и нижние правые ячейки. Из этого вы можете определить его правильный размер.
  3. используя двойной цикл, сопоставьте данные буфера обмена из позиции массива непосредственно координате ячейки (не используя выбранные ячейки), используя координату ячейки topleft в качестве смещения.

альтернативно, а не 2 размерный массив, вы можете создать список небольшого класса / структуры, содержащего строку свойств, Col и Value. Затем просто повторите это, а не двойной цикл.