Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Datagridview: Beim Öffnen einer Combobox, in der nichts selektiert ist, erscheint der erste Wert
-Hades-
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Deutschland NRW

Themenstarter:

Datagridview: Beim Öffnen einer Combobox, in der nichts selektiert ist, erscheint der erste Wert

beantworten | zitieren | melden

Hallo,

ich habe in meinen Datagridviews viele ComboBoxen. Standardmäßig haben diese keinen Default-Wert, sind also nicht gefüllt. Die Datasource ist allerdings gesetzt. Wenn man jetzt auf die Combobox klickt, wird der erste Eintrag aus der Datasource direkt in die Combobox geschrieben, als wenn man den Eintrag ausgewählt hätte.
Wenn jetzt allerdings keiner der Einträge direkt ausgewählt wird, klappt die Combobox wieder zu und der anscheinend ausgewählte Wert verschwindet und die Box ist wieder leer.

Weiß jemand wie man dieses Verhalten abändern kann, so dass entweder kein Wert in die Box geschrieben solange man nichts explizit ausgewählt hat oder das der angezeigte Wert dann auch wirklich ausgewählt ist?

Gruß
-Hades-
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo -Hades-,

ich denke, ein generelles Problem in Windows Forms ist, dass eine ComboBox (mit ComboBoxStyle.DropDownList), in der kein Eintrag selektiert ist, in einem Zustand ist, in den sie der Benutzer gar nicht (wieder) bringen kann. Wenn er erstmal einen Eintrag selektiert hat, gibt es meines Wissens keine Möglichkeit für den Benutzer, die Selektion wieder loszuwerden. Das ist wie bei einer Radiobuttons Gruppe von Radiobuttons, von denen keiner selektiert ist. Wenn der Benutzer einen davon selektiert, ist von da an mindestens einer selektiert, egal was der Benutzer tut.

So eine Konstruktion macht nur bei Pflichtfeldern Sinn, bei denen man gleichzeitig sicherstellen will, dass der Benutzer aktiv eine Auswahl trifft (und nicht einfach nur die voreingestellten Werte akzeptiert).

Bei dir klingt es mir dagegen so, dass es wirklich möglich sein soll, die Zelle "leer" zu lassen. Wenn das so ist, solltest du einen zusätzlichen Eintrag "<Keine Auswahl>" o.ä. verwenden, der dann auch gleich vorselektiert sein sollte. Damit hättest du den beschriebenen Effekt vermieden.

herbivore
private Nachricht | Beiträge des Benutzers
-Hades-
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Deutschland NRW

Themenstarter:

beantworten | zitieren | melden

Hallo herbivore,

nein da hast du mich missverstanden. Es ist bei mir so, dass zunächst kein Wert in der Combobox steht, das ist auch gut so. Wenn jetzt der Anwender auf die Box klickt, so dass die Drop-Down-Liste angezeigt wird, steht in der Combobox bereits der Name des ersten Items der Dropdown-Liste. Wenn jetzt kein Item der Dropdown-Liste ausgewählt wird, sondern z.B. ganz woanders auf die Form geklickt wird, verschwindet der Name in der Combobox aber wieder, obwohl der Anwender dachte es sei bereits der erste Eintrag genommen worden. Dieses Verhalten ist sehr unintuitiv.
Erst wenn mit der Maus wirklich nochmal explizit ein Item der Dropdown-Liste angeklickt wird, behält die Combobox diesen Wert auch nachdem sie den Fokus verliert.

Ich hoffe so war es verständlicher.

Gruß
-Hades-
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo -Hades-,

ich hatte es von Anfang an so verstanden, wie du es erneut geschrieben hast, auch wenn ich den Schwerpunkt in meiner Antwort etwas anders gesetzt habe. Die Ursache allen Übels liegt darin, dass es unter Windows Forms überhaupt möglich ist, eine ComboBox per Programm in einen Zustand zu bekommen, in der kein Eintrag selektiert ist.

Zudem war der erste Satz meiner Antwort vielleicht missverständlich, weshalb ich ihn präzisiert habe. Ich meine nicht dein konkretes Problem, sondern habe über ein generelles Problem von Windows Forms gesprochen.

Jedenfalls denke ich, dass mein Vorschlag dein Problem löst.

herbivore
private Nachricht | Beiträge des Benutzers
-Hades-
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Deutschland NRW

Themenstarter:

beantworten | zitieren | melden

Hmm ok dann hattest du mich doch verstanden. Allerdings löst ein Eintrag "Keine Auswahl" oder dergleichen nicht unbedingt mein Problem. In der Tat ist es so, dass es bereits Einträge gibt die "Kein Wert" darstellen aber auch diese sollen oder vielmehr müssen vom Anwender bewusst eingegeben werden, weshalb es an der Stelle wichtig ist das der Benutzer sozusagen gezwungen wird etwas auszuwählen, da der "Kein Wert"-Eintrag halt auch den Programmfluss entscheidend beeinflusst.
Im Prinzip wollte ich die betreffende Spalte sogar farbig hinterlegen solange der Anwender nichts explizit ausgewählt hat.
Es würde halt schon reichen wenn nichts in das Auswahlfeld geschrieben wird solnage kein Item explizit ausgewählt wurde, so dass der Anwender nicht verwundert ist das die Box wieder geleert wird wenn die Box den Fokus verliert.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo -Hades-,

dann mach für den Fall halt einen Eintrag "<noch nicht gewählt>"* und einen "<kein Wert>"**.

herbivore

* oder "<noch nicht entschieden>" oder "<noch keine Auswahl getroffen>" oder "<undefiniert>" oder ...
** oder "<keiner der Werte>" oder "<nichts>" oder "<keins>" oder "<keiner>" oder "<leer>" oder ...
private Nachricht | Beiträge des Benutzers
-Hades-
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Deutschland NRW

Themenstarter:

beantworten | zitieren | melden

Hehe,

ja das geht natürlich... Ich schaue selbst noch einmal ob das Verhalten nicht zu ändern ist. Die Items kommen direkt aus einer Datenbank und werden per Datasource gebunden. Ich möchte solche Sachen an sich nicht mit in die Datenbank aufnehmen und vor allem müsste ich das dann an sehr vielen Stellen machen (über 20 Tabellen).
Vielleicht kann ich, wenn auf die Box geklickt wird, ja den Text der Box löschen oder so, ich schaue mal.
Vielen Dank soweit für die Hilfe!


Gruß
-Hades-
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo -Hades-,

ich würde versuchen, eine möglichst universelle Wrapper-Klasse für die DataSource schreiben, die die gewünschten zusätzlichen Einträge automatisch hinzufügt.

herbivore
private Nachricht | Beiträge des Benutzers
-Hades-
myCSharp.de - Member



Dabei seit:
Beiträge: 171
Herkunft: Deutschland NRW

Themenstarter:

beantworten | zitieren | melden

Das wäre durchaus denkbar und ist wahrscheinlich eine saubere Lösung.

Gruß
-Hades-
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von -Hades- am .
private Nachricht | Beiträge des Benutzers