Практическое руководство.Порядок 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;
- преобразуйте данные буфера обмена в 2-мерный массив. Запомните длину каждого измерения.
- выполните итерацию по выбранным ячейкам и найдите верхние левые и нижние правые ячейки. Из этого вы можете определить его правильный размер.
- используя двойной цикл, сопоставьте данные буфера обмена из позиции массива непосредственно координате ячейки (не используя выбранные ячейки), используя координату ячейки topleft в качестве смещения.
альтернативно, а не 2 размерный массив, вы можете создать список небольшого класса / структуры, содержащего строку свойств, Col и Value. Затем просто повторите это, а не двойной цикл.