Как установить «вставить новую строку» в качестве первой строки в DataGridView - PullRequest
6 голосов
/ 05 ноября 2008

Я пытаюсь заставить DataGridView отобразить строку «вставить новую строку» в качестве первой строки в сетке вместо последней строки. Как мне это сделать, возможно ли это в элементе управления?

Ответы [ 7 ]

7 голосов
/ 05 ноября 2008

Я не думаю, что есть какой-либо способ переместить строку "новой строки" в верхнюю часть сетки данных.

Но что, если вы оставили верхнюю строку пустой и по мере того, как заполненные данные сдвинули строку соответствующим образом? Другими словами, создайте свою собственную строку «новая строка», которая является просто первой строкой в ​​сетке, и добавьте новые пустые строки выше, когда редактирование закончится.

   Dim myrow = existingDataTable.NewRow

    existingDataTable.Rows.Add(myrow)

    adp.Fill(existingDataTable)
    With DataGridView1
        .DataSource =existingDataTable
    End With    
4 голосов
/ 15 ноября 2008

Если вы не используете связанные элементы управления, dgvItems.Rows.Insert () позволит вам указать, куда вставляется строка.

Если вы используете связанный вид сетки данных без активной сортировки, добавьте новую строку в источник данных в нужном месте:

BoundTable.Rows.InsertAt (BoundTable.Rows.NewRow (), RowLocation);

Я обнаружил интересную связь: если в текущей строке есть изменения, и строка не была зафиксирована в источнике данных (т. Е. Вы только начали вводить данные), кажется, необходимо переместить активную ячейку в другую. строка, чтобы зафиксировать изменения перед вставкой строк.

1 голос
/ 27 октября 2011

Как сказал Пока-E, используйте Insert вместо Add. Таким образом, вы можете указать, куда вы хотите добавить новую запись. Чтобы добавить новую запись поверх сетки, просто используйте Insert(0).

DataGridView1.Rows.Insert(0) это добавит новую запись сверху, всегда

DataGridView1.Rows(0).Cells(n).Value = "abc" это установит значение в столбце n

1 голос
/ 15 ноября 2008

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

Таким образом, когда ваши строки контента связаны, не возникает путаницы с индексами элементов, хотя я бы порекомендовал использовать некоторые DataKeys или что-то на всякий случай. Кроме того, использование события RowDatabound позволит вам иметь доступную «вставку строки», когда пользователь вставляет страницы в другой блок строк в GridView.

1 голос
/ 09 ноября 2008

И если все остальное терпит неудачу, хакерский способ заключался бы в том, чтобы поместить отдельную однострочную DataGridView над существующей, клонировать ее столбцы и подключить событие представления строки, чтобы добавить данные в нижнюю:)

1 голос
/ 06 ноября 2008

Можете ли вы назначить временное значение ключу новой строки, которое меньше, чем все существующие строки? Затем отсортируйте DataView по этому ключу и привяжите его к вашей сетке.

Моя команда использует отрицательные числа в качестве идентификаторов строк, пока эта строка не будет вставлена ​​в базу данных. Я не помню, чтобы наши новые строки отображались вверху, но у нас также нет этого требования.

0 голосов
/ 11 июня 2011

Я предполагаю, что вы имеете в виду, что когда вы хотите добавить новую строку, вы хотите, чтобы строка фактически вставлялась вверху таблицы, а не внизу таблицы, как по умолчанию? Хорошо, если это так, вам не нужно иметь дело с сортировкой или значениями ключа; просто сделайте так с методом вставки:

'Создать новую строку

Dim tmpRow = New DataGridViewRow

'Настроить строку каким-либо образом

tmpRow.Height = _cellRectSize

'Добавить строку в DataGridView (т.е. dgvEditor) вверху (индекс = 0)

Me.dgvEditor.Rows.Insert (0, tmpRow)

Работает для меня как оберег, надеюсь, это поможет кому-то еще!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...