Ваш код добавляет данные в заголовок столбца со строкой ...
dgvAuthG.Columns.Add("col" + i, pastedRowCells[i]);
… вторым параметром является текст заголовка. Я не уверен, что вы ожидаете здесь. Если вы хотите, чтобы заголовок столбца был «пустым», не добавляйте текст, как делает код.
Я настоятельно рекомендую вам отдельно добавлять столбцы в сетку из цикла, который добавляет строки. Это просто делает код цикла при добавлении строки сложным и ненужным. Вы «знаете», что ТОЛЬКО будете запускать этот код (добавляя столбцы) ОДИН РАЗ. Поэтому я рекомендую вам добавить столбцы перед началом добавления строк.
Проблема в том, что нам нужно прочитать одну из строк, чтобы получить количество столбцов. Поэтому было бы полезно, если бы у нас был этот номер столбца до того, как мы начали добавлять строки, мы могли бы затем использовать его для циклического перемещения по ячейкам в каждой строке. Вам нужно сделать это только один раз, и это может выглядеть следующим образом.
int totCols = pastedRows[0].Split(new char[] { '\t' }).Length;
Теперь, когда у вас есть количество столбцов для сетки, должен работать простой цикл добавления столбцов.
for (int i = 0; i < totCols; i++) {
dgvAuthG.Columns.Add("col" + i, "col" + i);
}
Это обеспечивает добавление столбцов в сетку и, безусловно, сделает цикл по строкам более простым и менее сложным.
Однако до этого я предполагаю, что вы, возможно, захотите пересмотреть «проверку», есть ли в сетке какие-либо существующие столбцы или строки. Вполне вероятно, что существующее количество столбцов НЕ будет соответствовать тому, что находится в «ClipBoard». Из-за этого нет смысла проверять ... просто удалить все столбцы и начать все сначала. В противном случае сбой почти гарантирован.
Наконец, я использовал другой подход к добавлению строк. По сути, код получает индекс для новой строки и добавляет значения, проходя по ячейкам. Соединение всего этого может выглядеть примерно так:
private void button1_Click(object sender, EventArgs e) {
DataObject o = (DataObject)Clipboard.GetDataObject();
if (o.GetDataPresent(DataFormats.Text)) {
dgvAuthG.Columns.Clear();
string[] pastedRows = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd("\r\n".ToCharArray()), "\r\n");
int totCols = pastedRows[0].Split(new char[] { '\t' }).Length;
for (int i = 0; i < totCols; i++) {
dgvAuthG.Columns.Add("col" + i, "col" + i);
}
string[] pastedRowCells;
int newRowIndex;
foreach (string pastedRow in pastedRows) {
pastedRowCells = pastedRow.Split(new char[] { '\t' });
newRowIndex = dgvAuthG.Rows.Add();
for (int i = 0; i < totCols; i++) {
dgvAuthG.Rows[newRowIndex].Cells[i].Value = pastedRowCells[i];
}
}
}
//dgvAuthG.Columns.RemoveAt(0);
//btnFormat.Enabled = true;
//btnFormatWay4.Enabled = true;
}
Надеюсь, это поможет.