2008-11-04 15 views

Odpowiedz

7

Nie sądzę, że istnieje jakikolwiek sposób przeniesienia wiersza "nowego wiersza" na górę siatki danych.

Ale co się stanie, jeśli pozostawisz górny wiersz pusty i wypełnione dane zostaną odpowiednio przesunięte w dół? Innymi słowy, utwórz własny wiersz "nowego wiersza", który jest pierwszym rzędem w siatce i dodaj nowe puste wiersze powyżej po zakończeniu edycji.

Dim myrow = existingDataTable.NewRow 

    existingDataTable.Rows.Add(myrow) 

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

hmm, które mogłyby pracować. Nie jestem pewien, jak by to działało z wiązaniem danych itp., Ale będę musiał trochę poeksperymentować. –

1

Czy można przypisać tymczasową wartość do klucza nowego wiersza, która jest mniejsza niż wszystkie istniejące wiersze? Następnie posortuj DataView według tego klucza i powiązaj widok z siatką.

Mój zespół używa liczb ujemnych jako identyfikatorów rzędów, dopóki ten wiersz nie zostanie wstawiony do bazy danych. Nie przypominam sobie, żeby nasze nowe wiersze pokazywały się na górze, ale my też tego nie wymagamy.

1

A jeśli wszystko inne zawiedzie hacky sposób byłoby umieścić oddzielny DataGridView jednej linijce powyżej istniejącego, sklonować jego kolumny, a nawet drut zdarzenie składania rząd, aby dodać dane do dolna :)

4

Jeśli nie używasz powiązanych elementów sterujących, dgvItems.Rows.Insert() umożliwia określenie miejsca wstawienia wiersza.

Jeśli używasz związany DataGridView, bez pewnego rodzaju czynnej, dodać nowy wiersz do źródła danych w wybranej lokalizacji:

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

Znalazłem interesującą relację, jeśli istnieją edycje w bieżącym wierszu, a wiersz nie został zatwierdzony do źródła danych (tzn. Po prostu zacząłeś wprowadzać dane), wydaje się konieczne przeniesienie aktywnej komórki do kolejny wiersz, aby zatwierdzić zmiany przed wstawieniem wierszy.

+0

@Jeff Corder został przez przypadek zaksięgowany, zanim w pełni przeczytam Twój komentarz, ale pozostanie on niezauważony dla Twojego opisu. Jest to jednak moim zdaniem najskuteczniejszy sposób, aby to zrobić, jeśli nie chcesz pracować z unikalnymi identyfikatorami klucza. –

1

Czy zużywasz zdarzenie RowDataBound? Jeśli tak, możesz sprawdzić, czy wiążisz wiersz nagłówka kolumny, a następnie dodaj odpowiedni kod, aby wstawić wiersz tuż poniżej.

W ten sposób, gdy wiersze treści są powiązane, nie ma żadnego zamieszania z indeksami elementów, ale zaleca się używanie niektórych DataKeys lub czegoś na wszelki wypadek. Ponadto użycie zdarzenia RowDatabound umożliwiłoby dodanie "wiersza wstawiania", gdy strony użytkownika znajdą się w innym bloku wierszy w widoku GridView.

-2

Zakładam, że masz na myśli, że kiedy chcesz dodać nowy wiersz, chcesz, aby wiersz był wstawiany u góry tabeli, a nie u dołu tabeli, tak jak domyślnie? Jeśli tak jest, nie musisz zajmować się sortowaniem ani wartościami kluczowymi; po prostu zrobić jako taki metodą Insert:

'Utwórz nowy wiersz

Dim tmpRow = Nowa DataGridViewRow

' Adjust wiersz w jakiś sposób

tmpRow.Wysokość = _cellRectSize

„Dodaj wiersz DataGridView (tj dgvEditor) w górę (indeks = 0)

Me.dgvEditor.Rows.Insert (0 tmpRow)

roboty jak dla mnie urok, mam nadzieję, że pomoże to komuś innemu!

1

Jak już powiedziałem podczas E, użyj Insert zamiast Add. W ten sposób możesz określić, gdzie chcesz dodać nowy rekord. Aby dodać nowy rekord na szczycie siatki, po prostu użyj Insert(0).

DataGridView1.Rows.Insert(0) Spowoduje to dodanie nowego rekordu na górze, zawsze

DataGridView1.Rows(0).Cells(n).Value = "abc" zostanie ustawiony na wartość n kolumny