Announcement

Collapse
No announcement yet.

Checkbox True/False

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Checkbox True/False

    Hi,
    ich verwende eine Firebird Datenbank 1.5 in
    der ich ein CHAR(1) Feld für T oder F verwende, weil es kein Boolean-Feld gibt.
    Ehemals bei Delphi kein Problem.
    Aber in C#?
    Für das Binding über Dataset in Checkbox() ?? und
    im DataGridView mit DataGridViewCheckboxColumn() finde
    ich keine Lösung.

    Gruss
    Rudolf

  • #2
    Hallo,

    für dieses Problem gibt es eine einfache Lösung. Angenommen, in der Datenbank hat die Tabelle den folgenden Aufbau (ich verwendet dazu die MS SQL Server 2005 Express Edition):

    <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;"><span style="color: blue;">USE </span>tempdb</p><p style="margin: 0px;">GO</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><span style="color: blue;">CREATE TABLE </span>CheckBoxDemo</p><p style="margin: 0px;">(</p><p style="margin: 0px;">&nbsp; checkboxdemo_id <span style="color: blue;">INT NOT NULL </span>&nbsp;&nbsp;&nbsp; <span style="color: blue;">IDENTITY PRIMARY KEY</span>,</p><p style="margin: 0px;">&nbsp; checked_b&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="color: blue;">BIT NOT NULL </span>&nbsp;&nbsp;&nbsp; <span style="color: blue;">DEFAULT </span>0,</p><p style="margin: 0px;">&nbsp; checked_c&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <span style="color: blue;">CHAR</span>(1) <span style="color: blue;">NOT NULL DEFAULT </span><span style="color: maroon;">'F'</span></p><p style="margin: 0px;">)</p><p style="margin: 0px;">GO</p><p style="margin: 0px;"><span style="color: blue;">INSERT INTO </span>dbo.CheckBoxDemo <span style="color: blue;">DEFAULT VALUES</span>;</p><p style="margin: 0px;"><span style="color: blue;">INSERT INTO </span>dbo.CheckBoxDemo (checked_b,checked_c) <span style="color: blue;">VALUES </span>(1,<span style="color: maroon;">'T'</span>);</p><p style="margin: 0px;">GO</p><p style="margin: 0px;"><span style="color: blue;">SELECT </span>* <span style="color: blue;">FROM </span>dbo.CheckBoxDemo</p></div>

    Wenn in Visual Studio 2005 über das Data Sources-Fenster die Tabelle auf das Formular gezogen wird, konfiguriert Visual Studio 2005 das DataGridView automatisch. Allerdings ist die 3. Spalte eine normale DataGridViewTextBoxColumn. Daher wird über den Smart Tag <b>Edit Columns...</b> der <b>Edit Columns</b>-Dialog aufgerufen. Dort wird die Spalte <i>checked_c</i> ausgewählt, um für die Eigenschaft <b>ColumnType</b> den Eintrag <i>DataGridViewCheckBoxColumn</i> auszuwählen. Damit die Datenbankeinträge "F" bzw. "T" erkannt werden, erhält die Eigenschaft <b>FalseValue</b> den Eintrag F und die Eigenschaft <b>TrueValue</b> den Eintrag T. Wird der <b>Edit Columns</b>-Dialog geschlossen und die Anwendung gestartet, ist das Aussehen der 2. und 3. Spalte im DataGridView identisch.

    Bei einer einzelnen Checkbox ist der Aufwand etwas höher. Im Properties-Editor wird über <b>(DataBindings) | (Advanced)</b> der Dialog <b>Formatting and Advanced Binding</b> aufgerufen, um dort für die Eigenschaft <b>Checked</b> die Bindung an die Spalte <i>checked_c</i> zu aktivieren. Dabei wird der <b>Data Source Update Mode</b> auf den Eintrag <b>Never</b> gesetzt. Sobald diese Vorbereitungen abgeschlossen sind, wird eine Ereignisbehandlungsmethode für das <b>Format</b>-Ereignis aktiviert, um dort die Checkbox immer dann anzukreuzen, wenn in der CHAR(1)-Spalte der Wert "T" vorgefunden wird:

    <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: teal;">Binding</span> aCBBinding;</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">private</span> <span style="color: blue;">void</span> Form1_Load(<span style="color: blue;">object</span> sender, <span style="color: teal;">EventArgs</span> e)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">this</span>.checkBoxDemoTableAdapter.Fill(<span style="color: blue;">this</span>.tempdbDataSet.CheckBoxDemo);</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: green;">// Format-Ereignis der Checkbox auswerten</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCBBinding = checkBox1.DataBindings[0];</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; aCBBinding.Format += <span style="color: blue;">new</span> <span style="color: teal;">ConvertEventHandler</span>(aCBBinding_Format);</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">void</span> aCBBinding_Format(<span style="color: blue;">object</span> sender, <span style="color: teal;">ConvertEventArgs</span> e)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (e.Value.GetType() == <span style="color: blue;">typeof</span>(<span style="color: blue;">string</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; toolStripStatusLabel1.Text = e.Value.ToString();</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">if</span> (e.Value.ToString().Equals(<span style="color: maroon;">"T"</span>))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; checkBox1.Checked = <span style="color: blue;">true</span>;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="color: blue;">else</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; checkBox1.Checked = <span style="color: blue;">false</span>;</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p></div&gt

    Comment


    • #3
      Hallo Andreas Kosch,

      vielen Dank für die schnelle Hilfe.

      Gruß
      Rudol

      Comment

      Working...
      X