So ändern Sie den Wert einer Zelle in einem gridview in Laufzeit?
Details
Ich habe eine datagridview
zu manipulieren, dass die Daten aus einer Datenbank. Ich habe eine Spalte mit numerischen Wert und jede Zahl ist die Darstellung einer string-Wert, zum Beispiel,
0 => "group 1",
1 => "group 2"
and so on...
Benutzer angezeigt werden müssen diese Daten als lesbarer Form, d.h. 0 => "Gruppe 1". so etwas wie dieses:
id priceGroupID
----------- ------------
1234 -1 => "group -1"
36968 0 => "group 0"
1 2 => "group 2"
2 2 => "group 2"
3 2 => "group 2"
1003 2 => "group 2"
in diesem link: (stackoverflow.com/questions/10314996/...) repräsentieren eine Idee, aber ich will etwas anderes. etwas mehr mächtig. scheuen Sie sich nicht, wenn es keine andere Möglichkeit gibt bitte sagt mir, dass es nicht ist.
Zusammenfassung und Fragen
also in Kürze:
- Ich möchte die Anzeige dieser Daten in der Gridview-ohne jede änderung in meiner db.
- Ich will das vorgeschlagene format. Gibt es eine einfache Möglichkeit, um das eine format, was bedeutet
n => "group m"
. - cellformatting ist nicht das, was ich bin, hier. CellFormatting nur Formate, die der Zelle in Bezug auf das Daten-format. (msdn)
und noch eins: meine Programmiersprache ist c# in der windows-app.
Ich hoffe, dass ich sage, was ich meine.
vielen Dank im Voraus.
- Ich habe irgendwo gelesen, über das cellFormatting, aber es ist nicht eine gute Idee, und verringern Sie die Geschwindigkeit des Programms. schließlich habe ich, denke ich, dass die Verwendung.
- cellformatting ist nicht, was Sie werden wollen, hier..zumindest aus der Frage und Beispiel. cellformatting nur Formate, die der Zelle in Bezug auf das Daten-format msdn.microsoft.com/en-us/library/...
- Das schlimme an dieser Vorgehensweise ist, wenn der Benutzer änderungen, die Zelle "Gruppe 7" ist nicht legal und es nicht analysieren das format, so dass Benutzer zum ändern von "Gruppe 4", "4" oder Sie haben es zu tun, für die Sie in anderen Veranstaltungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lassen Sie sehen, was Sie bekam.
Groß, das ist, wie es sein sollte. Daten muss von den Daten getrennt werden Darstellung.
Falsch!
Formatierung ist genau das, was Sie brauchen. Ein und dieselben Daten können auf unterschiedliche Weise dargestellt werden. Zum Beispiel, eine und die Nummer oder date-Wert kann angezeigt werden (formatiert) mit tausenden Möglichkeiten (Formate). Das ist genau das, was string.Format (und andere
Format
) Methoden tun. Ein weiteres Beispiel istCheckbox
zeigtbool
Wert. Ein weiteres Beispiel istComboBox
anzeigenValueMember
alsDisplayMember
. Etc.In der Tat Ihre Anforderung ist eine Variante des
Format
- Funktion und kann erreicht werden mit einem Benutzerdefinierte Numerische Formatzeichenfolge. Alles, was Sie brauchen, ist zum einstellen DataGridViewColumn.DefaultCellStyle Eigenschaft Format zur "Gruppe 0".Wenn das format noch nicht genug war, im Gegensatz zu dem, was einige Leute sagen, die CellFormatting event ist genau das, was Sie brauchen.
Den Effekt auf die Leistung ist vernachlässigbar, die meisten der Zeit, da der Wert in eine Zeichenfolge konvertiert, die nur bei Bedarf angezeigt werden auf dem Bildschirm, und der Bildschirm kann eine begrenzte Anzahl von Zeilen im Vergleich zu der gesamten Anzahl von Zeilen (im Falle Sie haben eine riesige Daten).
Einer der Vorteile der Sie den Wert/display-text-Trennung ist, dass der grid die Sortierung korrekt funktioniert (durch numerische anstelle von text).
Abschließen, lassen Sie sich nicht täuschen, konvertieren Sie Ihre Daten Speicher Werte für die Anzeige. Jedes Steuerelement hat die Formatierung Funktionen, nur Sie verwenden. Da fragte man für eine einfache Möglichkeit,
Format
Eigenschaft ist die einfachste, aber effektive Lösung in Ihrem Fall.Hier ist ein Beispiel mit 100.000 Zeilen mit Formatierung Ansätze (Kommentar der einen und kommentieren Sie die anderen spielen mit). Sie können sehen, dass es absolut keine performance-Probleme, und
GroupId
Spalte die Sortierung funktioniert korrekt.sicher, es ist einfach.
benötigen Sie Zugriff auf die Zeile, die index, gefolgt von dem Namen der Spalte und setzen Sie seinen Wert. Zum Beispiel:
diesem Beispiel greift die erste Zeile und die Zelle "Vorname" und ändert seinen Wert auf "billy".
änderungen gewohnt auf die DB, sondern kann sich auf die datasource binden wodurch sich die änderung auf die datasource. stattdessen möchten Sie vielleicht keine Referenz auf die datasource, also die änderungen sind schließlich nicht verpflichtet Sie zurück zu der DB arbeiten wenn Sie mit dieser datasource wie Sie es aktualisieren.
Versuchen, diese, Sie haben, um eine foreach-Schleife zum Durchlaufen aller Elemente in der datagridview zeigt dieses Beispiel, Sie zu ändern nur für den ersten Datensatz:
Verwenden Sie diese, wenn Sie sind, bevölkern das Netz.
Hoffe, das hilft