2008-11-04 2 views

ответ

7

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

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

Dim myrow = existingDataTable.NewRow 

    existingDataTable.Rows.Add(myrow) 

    adp.Fill(existingDataTable) 
    With DataGridView1 
     .DataSource =existingDataTable 
    End With  
+0

СММ, которые могли бы работать. Я не уверен, как это будет работать с привязкой данных и т. Д., Но мне придется немного поэкспериментировать с ним. – 2008-11-05 14:03:57

1

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

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

1

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

4

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

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

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

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

+0

@Jeff Corder случайно отправлен, прежде чем я полностью прочитаю ваш комментарий, но буду следить за тем, кто нечеткий в вашем описании. Однако это, на мой взгляд, самый эффективный способ сделать это, если вы не хотите работать с уникальными ключевыми идентификаторами. – 2011-06-11 07:32:06

1

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

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

-2

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

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

Dim tmpRow = Новый DataGridViewRow

' Adjust строку в некотором роде

tmpRow.Высота = _cellRectSize

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

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

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

1

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

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

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