Laden...

dataGridViewCheckbox mit 0/1-Integer-Werten füllen

Erstellt von RonnyW vor 12 Jahren Letzter Beitrag vor 11 Jahren 5.279 Views
R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 12 Jahren
dataGridViewCheckbox mit 0/1-Integer-Werten füllen

Tach,

folgendes Problem besteht.
Ich habe eine MySQL-DB in der sich in einer Tabelle eine Spalte befindet, die nur den Wert 0/1 annehmen kann.
So, nun les ich die Tabelle aus und übertrag sie in ein DataGridView. Nun möchte ich, dass die Spalte mit 0/1 nicht angezeigt wird, jedoch dazuverwendet wird, eine DataGridViewCheckBox zu füllen. Und ich steh total auf dem Schlauch.

Abfrage, Tabelle füllen = ok
Ausblenden der einen Spalte = ?
Setzen der Checkbox anhand der ausgeblendeten Spalte

Danke

RonnyW :evil:

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

So, nun les ich die Tabelle aus und übertrag sie in ein DataGridView

Welchen Datentyp hat die 0/1-Spalte nach dem Einlesen? Wenn es ein bool ist kann es per DataGridViewCheckBoxColumn angezeigt werden.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 12 Jahren

hab zwar bei der erstellung boolean angegeben, aber nun steht tinyint(1) als datentyp drin

RonnyW :evil:

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

dann frag ich anders: Wohin liest du die Daten ein damit sie in .net verwendet werden können? DataTable, eigenes Dömenobjekt, etc. Ist es dort ein bool?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 12 Jahren

Es wird per DataTable in ein DataGridView übertragen.
Ich lass mir einfach das Resultat einer SELECT-Anweisung in eine DataTable schreiben und geb die dann dem DGV.

Nachtrag: Die Tabelle wird somit dynamisch erzeugt und auch die Spalten sind nicht im DGV vorher angelegt, also gibts da keine Möglichkeit gleich als DGVCheckbox zu definieren, zumindest mir nicht bekannt, daher frag ich auch.

RonnyW :evil:

R
RonnyW Themenstarter:in
154 Beiträge seit 2007
vor 12 Jahren

Ich versuchs nochmal anders...
Ist es möglich, die dynamische Spalte (Werte 0/1) als DataGridViewCheckbox in der DataTable oder im DGV zu deklarieren?

RonnyW :evil:

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

ich verwende keine DataTables - daher auch keine Antwort von mir - sondern erstelle eigene Domänenobjekte und dort gibt es dann in diesem Fall eine bool-Eigenschaft. Die Daten werden per Repository aus der DB geholt und dieses ist auch für die allfällige Konvertierung von tinyint zu bool zuständig. Beim Binden gibt es dann keine Problem mehr.

Aber ich denke auch im DataTable muss der Datentyp auf bool festlegbar sein und somit sollt sich das Problem auch lösen können.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

T
18 Beiträge seit 2008
vor 12 Jahren

DataTable dt = new DataTable("MyTable");
DataColumn col1 = new DataColumn("BoolColumn1");
DataColumn col2 = new DataColumn("BoolColumn2");
            
col1.DataType = typeof(bool);
col2.DataType = typeof(bool);

dt.Columns.Add(col1);
dt.Columns.Add(col2);

DataRow dataRow = dt.NewRow();

dataRow["BoolColumn1"] = 0;
dataRow["BoolColumn2"] = 1;

dt.Rows.Add(dataRow);

dataGridView1.DataSource = dt;

Hi,
hier mal als Beispiel...
Wenn ich deine Frage richtig verstanden habe, ist es der DataType des DataTable den du setzen muss....

Lg Mike

So long and thanks for all the fish !

5.299 Beiträge seit 2008
vor 12 Jahren

Ich versuchs nochmal anders...
Ist es möglich, die dynamische Spalte (Werte 0/1) als DataGridViewCheckbox in der DataTable oder im DGV zu deklarieren?

Nein. Du mußt nach dem Einlesen die int-Werte nach bool konvertieren, und vor dem wegschreiben annersrum.
Wurde schon gesagt: DGVCheckboxColumn ist dafür da, bools anzuzeigen, keine ints

Der frühe Apfel fängt den Wurm.

R
158 Beiträge seit 2007
vor 12 Jahren

Ich habe eine MySQL-DB in der sich in einer Tabelle eine Spalte befindet, die nur den Wert 0/1 annehmen kann....
...hab zwar bei der erstellung boolean angegeben, aber nun steht tinyint(1) als datentyp drin ...

Ist auch richtig so, da MySql den Typ BOOLEAN als TinyInt 'versteht'.

...Nachtrag: Die Tabelle wird somit dynamisch erzeugt und auch die Spalten sind nicht im DGV vorher angelegt, also gibts da keine Möglichkeit gleich als DGVCheckbox zu definieren, zumindest mir nicht bekannt, daher frag ich auch.

Du kannst / solltest in diesem Fall auch die Spalten des DGV dann dynamisch erstellen. Ist zwar etwas Code tippen, aber erfüllt dann Deine Zweck 😉


		void GridVorbereiten(DataGridView dgv)
		{	//--WICHTIG!! Wenn nicht gesetzt, werden beim Binden an eine DataSource
			//--alle Spalten der DataSource(DataTable) zusätzlich generiert!!
			dgv.AutoGenerateColumns = false;

			DataGridViewCheckBoxColumn cbcol = new DataGridViewCheckBoxColumn();
			cbcol.Width = 20;
			cbcol.HeaderText = "...";
			cbcol.DataPropertyName = "MySql-TinyInt-Spalte";
			//--Spalte in der Tabelle ist vom Typ Int (bei MySql=TinyInt für BOOLEAN)
			//--wenn man ganz sicher gehen will, dann kann man das hier noch zusätzlich angeben:
			cbcol.TrueValue = 1;	//true
			cbcol.FalseValue = 0;	//false
			cbcol.DefaultCellStyle.DataSourceNullValue = 0;	//wenn Wert in Spalte = NULL ist
			dgv.Columns.Add(cbcol);

			DataGridViewTextBoxColumn txtcol;
			txtcol = new DataGridViewTextBoxColumn();
			txtcol.HeaderText = "...";
			txtcol.DataPropertyName = "...";
			txtcol.Width = 200;
			dgv.Columns.Add(txtcol);

			//--an die Datenquelle binden
			dgv.DataSource = DataTable_aus_MySQLAbfrage;
		}



Das DGV ist durchaus in der Lage, in einer DataGridViewCheckBoxColumn Int-Werte zu interpretieren: 0 ist false, 1 ist true 😉

Du mußt nach dem Einlesen die int-Werte nach bool konvertieren, und vor dem wegschreiben annersrum.
Wurde schon gesagt: DGVCheckboxColumn ist dafür da, bools anzuzeigen, keine ints

NÖÖ: Muss man nicht! Siehe meine Ausführung oben 😉 Für Die DGVCheckBoxColumn ist 0=false und 1=true

Und für das Wegschreiben in die MySql-Tabelle ist es für die TinyInt-Spalte auch unerheblich, welcher Wert übergeben wird

 SET TinyIntSpalte=0 
 SET TinyIntSpalte=false
 SET TinyIntSpalte=FALSE

Alle Schreibweisen sind richtig.

Übrigens: selbst ohne die expliziete Zuweisung

			cbcol.TrueValue = 1;	//true
			cbcol.FalseValue = 0;	//false

wird der 'Zustand' der DGVCheckboxColumn richtig angezeigt 😉

Beim Binden gibt es dann keine Problem mehr. Gibt es bei meiner o.a. Bindung auch nicht.

Aber ich denke auch im DataTable muss der Datentyp auf bool festlegbar sein und somit sollt sich das Problem auch lösen können.

Die DataTable bzw das Schema derselben wird aus der MySql-Abfrage generiert und da ist der Spaltentyp NICHT Boolean sondern TinyInt bzw Int - somit kann hier dann nix festgelegt werden.

Gruß Rainer

R
158 Beiträge seit 2007
vor 12 Jahren

Nachtrag:

Mithilfe der DataGridViewCheckBoxColumn kann auch der Wert einer Tabellenspalte vom TypVarChar bzw String als true bzw false angezeigt werden.
Bspw. wenn in einer Mitgliedertabelle die Spalte 'Status' als String deklariert ist und die Werte 'aktiv' bzw 'inaktiv' enthält, sind die Value-Werte der Checkbox dann so zu notieren:

            cbcol.TrueValue = "aktiv";    //true
            cbcol.FalseValue = "inaktiv";    //false
            cbcol.DefaultCellStyle.DataSourceNullValue = "inaktiv";    //wenn Wert in Spalte = NULL ist

Oder wenn in o.a. Tabelle die Spalte 'Aktiv' benamt ist und nur die Einträge 'J' bzw 'N' zulässt, dann wird das halt so notiert:

            cbcol.TrueValue = "J";    //true
            cbcol.FalseValue = "N";    //false
            cbcol.DefaultCellStyle.DataSourceNullValue = "N";    //wenn Wert in Spalte = NULL ist

Also muss für zur Darstellung eines BOOLEAN-Zustandes nicht zwangsläufig auch das Tabellenfeld BOOLEAN sein 😉

H
8 Beiträge seit 2013
vor 11 Jahren

Hallo,

bin grade bei meiner Lösungsuche auf diese seite gestoßen und wollte mal 3 sachen fragen.
Wiso in den von raiguen geschriebenen Codezeilen die Data Source in die Erstellen Spalten eingefügt wird. Ich habe über vs2010 mir ein Dgv erstellt und da drinnen die Spalten schon definirt und möchte jetzt per Data Source die Daten einbinden. Aber wenn ich AutoGenerateColumns auf false setzt wird garnicht rein geschrieben und wenn true werden nur weiter neue Spalten hinzugefügt. Wie kann ich also meine defienirten Spalten über die Data Source befüllen ?

Und nehmen wir mal an ich mache die Erstellung der Spalten auch dynamisch. Wie kann ich die Daten einer bestimmter spalte die aus der Datasource kommen in bool umwandeln.

mfG Sam