Я пытаюсь добавить функцию вставки в свой Windows Forms DataGridView на C#. У меня уже есть код, который отлично работает, но только до тех пор, пока в DataGridView "достаточно" столбцов и строк.
Скажем, я скопировал один столбец Excel с пятью строками и хочу вставить его в столбец в DataGridView с четырьмя строками, последняя строка будет обрезана. Моя цель - добавить эту строку, чтобы можно было добавить и вставленное значение.
Это мой код:
string s = Clipboard.GetText();
string[] lines = s.Split('\n');
int row = dataGridView1.CurrentCell.RowIndex;
int col = dataGridView1.CurrentCell.ColumnIndex;
foreach (string line in lines)
{
if (row < dataGridView1.RowCount && line.Length >0)
{
string[] cells = line.Split('\t');
for (int i = 0; i < cells.GetLength(0); ++i)
{
if (col + i < this.dataGridView1.ColumnCount)
{
dataGridView1[col + i, row].Value = Convert.ChangeType(cells[i], dataGridView1[col + i, row].ValueType);
}
else
{
break;
}
}
row++;
}
else
{
break;
}
}
Я спрашиваю, как я могу использовать этот код для добавления нового столбца или строки, когда диапазон вставленных ячеек не помещается в диапазон datagridview.
Вы можете разделить это на подзадачи: 1) определить, что строк недостаточно; 2) добавить строки; 3) определить, что столбцов недостаточно; 4) добавить столбцы. Какой из них для вас проблематичен? Вам нужно сконцентрироваться на одном и задать конкретный вопрос, иначе ваш вопрос будет слишком широким.
Мой вопрос касается подзадач 1) и 3)
Хорошо, вам нужно отредактировать свой вопрос, чтобы он был понятнее. Теперь давайте сконцентрируемся на 1: вы уже используете dataGridView1.RowCount и уже отслеживаете номер текущей строки (int row). Сравнение этих значений должно быть тривиальным делом, не так ли? Можете прояснить, в чем тут проблема?
Спасибо, это привело меня к правильному пути решения





Теперь этот код решает мою проблему:
string s = Clipboard.GetText();
string[] lines = s.Split('\n');
int row = dataGridView1.CurrentCell.RowIndex;
int col = dataGridView1.CurrentCell.ColumnIndex;
while (lines.Length != (dataGridView1.RowCount -row))
{
dt.Rows.Add();
}
foreach (string line in lines)
{
if (row < dataGridView1.RowCount && line.Length >0)
{
string[] cells = line.Split('\t');
while(cells.Length != (dataGridView1.ColumnCount - col))
{
dt.Columns.Add();
}
for (int i = 0; i < cells.GetLength(0); ++i)
{
if (col + i < this.dataGridView1.ColumnCount)
{
dataGridView1[col + i, row].Value = Convert.ChangeType(cells[i], dataGridView1[col + i, row].ValueType);
}
else
{
break;
}
}
row++;
}
else
{
break;
}
}
Вы спрашиваете, как добавить новый столбец или строка в datagridview? Вам нужно уточнить свой вопрос.