Я пытаюсь заставить DataGridView отображать строку «insert new row» в качестве первой строки в сетке вместо последней строки. Как я могу это сделать, возможно ли это в контроле?Как установить «вставить новую строку» в первую строку в DataGridView
ответ
Я не думаю, что есть какой-либо способ переместить строку «новая строка» в верхнюю часть сетки данных.
Но что, если вы оставили верхний ряд пустым и как данные заполнили, переместите строку по мере необходимости? Другими словами, создайте собственную строку «новая строка», которая является первой строкой в сетке и добавит новые пустые строки выше, когда редактирование закончено.
Dim myrow = existingDataTable.NewRow
existingDataTable.Rows.Add(myrow)
adp.Fill(existingDataTable)
With DataGridView1
.DataSource =existingDataTable
End With
Можете ли вы присвоить временное значение ключу новой строки, который меньше всех существующих строк? Затем сортируйте DataView с помощью этого ключа и привяжите представление к вашей сетке.
Моя команда использует отрицательные числа как идентификаторы строк до тех пор, пока эта строка не будет вставлена в базу данных. Я не помню, чтобы наши новые строки показывались вверху, но у нас также нет этого в качестве требования.
И если все остальное терпит неудачу Hacky способ был бы поставить отдельную одну строку DataGridView выше существующего, клонировать ее столбцы, и проволоку до события представления строки, чтобы добавить данные в нижнем :)
Если вы не используете связанные элементы управления, dgvItems.Rows.Insert() позволит вам указать, куда вставляется строка.
Если вы используете связанный DataGridView, без своего рода активного, добавьте новую строку в источнике данных в нужном месте:
BoundTable.Rows.InsertAt (BoundTable.Rows.NewRow(), RowLocation) ;
Я нашел интересную взаимосвязь, если в текущей строке есть изменения, и строка не была привязана к источнику данных (т. Е. Вы только начали вводить данные), кажется, что необходимо переместить активную ячейку в другую строку для фиксации изменений перед вставкой строк.
@Jeff Corder случайно отправлен, прежде чем я полностью прочитаю ваш комментарий, но буду следить за тем, кто нечеткий в вашем описании. Однако это, на мой взгляд, самый эффективный способ сделать это, если вы не хотите работать с уникальными ключевыми идентификаторами. – 2011-06-11 07:32:06
Вы потребляете событие RowDataBound? Если это так, вы можете проверить, привязана ли строка заголовка столбца, а затем добавить соответствующий код, чтобы вставить строку чуть ниже.
Таким образом, когда строки содержимого привязаны, нет никакой путаницы с включенными индексами элементов, хотя я бы рекомендовал использовать некоторые DataKeys или что-то на всякий случай. Кроме того, использование события RowDatabound позволит вам иметь «строку вставки», доступную, когда пользовательские страницы будут иметь другой блок строк в GridView.
Я предполагаю, что вы хотите сказать, что если вы хотите добавить новую строку, вы хотите, чтобы строка фактически была вставлена в верхней части таблицы, а не внизу таблицы, как и по умолчанию? Хорошо, если это так, вам не нужно иметь дело с сортировкой или ключевыми значениями; просто сделать, как, например с помощью метода Insert:
'Создать новую строку
Dim tmpRow = Новый DataGridViewRow
' Adjust строку в некотором роде
tmpRow.Высота = _cellRectSize
«Добавить строку в DataGridView (т.е. dgvEditor) в верхней части (индекс = 0)
Me.dgvEditor.Rows.Insert (0, tmpRow)
работы как прелесть для меня, надеюсь, что это поможет кому-то еще!
As While-E сказал, используйте Insert
вместо Add
. Таким образом вы можете указать, где вы хотите добавить новую запись. Чтобы добавить новую запись поверх сетки, просто используйте Insert(0)
.
DataGridView1.Rows.Insert(0)
это добавит новую запись на вершине, всегда
DataGridView1.Rows(0).Cells(n).Value = "abc"
это установит значение в русском колонке
СММ, которые могли бы работать. Я не уверен, как это будет работать с привязкой данных и т. Д., Но мне придется немного поэкспериментировать с ним. – 2008-11-05 14:03:57