Michael Waguih Ответов: 4

Предварительное заполнение при добавлении новой строки в DataGridView


Всем привет,

У меня есть DataGridView где я устанавливаю его AllowUserToAddRow свойство в true,
Когда вы используете клавиатуру для ввода, она работает и дает мне новую строку,
но при попытке заполнить строку с помощью такого кода :
dataGridView1.Rows[dataGridView1.RowCount - 1].Cells["ID"].Value = "1";

Он заполняет его данными, но без добавления новой строки.

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

Заранее спасибо,
:)

fjdiewornncalwe

Основываясь на вашем комментарии к нижеприведенному ответу Гриффа, я взял на себя смелость обновить тему вашего вопроса, включив в нее "предпопуляцию", чтобы ваш вопрос мог привлечь более подходящие ответы.

4 Ответов

Рейтинг:
2

Paul Goldenberg

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

private void addRowButton_Click(object sender, EventArgs e)
{
    int rowIndex = dataGridView1.Rows.Add();
    DataGridViewRow row = dataGridView1.Rows[rowIndex];
    row.Cells[0].Value = "test1";
    row.Cells[1].Value = "test2";
    row.Cells[2].Value = "test3";
    dataGridView1.CurrentCell = row.Cells[0];
}


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

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
    DataGridViewRow row = dataGridView1.Rows[e.RowIndex - 1];
    row.Cells[0].Value = "test1";
    row.Cells[1].Value = "test2";
    row.Cells[2].Value = "test3";
}


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


Рейтинг:
1

Vincent Piel

У меня была та же проблема : как сделать так, чтобы пустая строка DataGrid была
есть вычисленные значения. Я разместил этот вопрос и ответ здесь :

http://stackoverflow.com/questions/12485664/set-the-content-of-a-new-row-datagrid[^]

я копирую ответ здесь :

Когда объект DataTable привязан к элементу управления DataGrid, в CollectionView создан для того, чтобы увидеть его. Вы можете получить его с помощью метода (static/shared) CollectionView.GetDefaultView(ThePropertyThatIsBound).
Поскольку он реализует ICollectionChanged, вы можете добавить обработчик событий в CollectionChangedEvent.

В обработчике событий CollectionChanged, если у вас есть новый элемент (например, NewItems.Count>0) вы должны проверить его против системы.Windows.Data.CollectionView.NewItemPlaceholder и если это не держатель места, то это совершенно новый элемент, для которого я могу установить все значения по умолчанию.


Рейтинг:
0

OriginalGriff

Попробуйте Практическое руководство.Строк.Добавить[^] метод!


Michael Waguih

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

Рейтинг:
0

Member 14190010

Вы не можете изменить ячейки в строке в поле UserAddedRow событие. Воспользуйся DefaultValuesNeeded[^] вместо.