2009-05-04 6 views
2

Ich muss Datarows an meine Kontrollen binden. So weit, ist es gut. Das Problem ist jetzt, dass mein Datarow nur Strings in der Spalte enthält, die ich binden muss, aber die Eigenschaft "checked" einer Checkbox nimmt natürlich nur boolesche Argumente.Datenbindung für Checkbox mit Stringvalues ​​

Gibt es eine Möglichkeit, DataBinding hier zu verwenden? Vielleicht mit einer Art Konverter dazwischen?

Dank

+0

ASP.NET oder Win Forms? – Oakcool

+0

Was verwenden Sie als Zeichenfolgendarstellung des booleschen Werts? 'Wahr falsch'? '1'/'0'? Etwas Code könnte helfen, vorzugsweise der Code, an den Sie die Steuerelemente binden. – Phaedrus

Antwort

11

Verwenden Sie die ConvertEventHandler Delegate, um Typen für DataBinding zu ändern.

Beispiel

Binding binding = new Binding("checked", dt, "string_field"); 
    binding.Format += new ConvertEventHandler(binding_Format); 
    binding.Parse += new ConvertEventHandler(binding_Parse); 
    this.checkbox1.DataBindings.Add(binding); 

    void binding_Format(object sender, ConvertEventArgs e) 
    { 
     if (e.Value.ToString() == "yep") e.Value = true; 
     else e.Value = false; 
    } 

    void binding_Parse(object sender, ConvertEventArgs e) 
    { 
     if ((bool)e.Value) e.Value = "yep"; 
     else e.Value = "nope"; 
    } 
+1

Jetzt ist das praktisch! :) +1 – roosteronacid

+0

Vielen Dank. Aber immer noch eine Frage. Konvertiert der ConvertEventHandler auch meine Werte zurück in die Zeichenfolge, wenn es in die Datenbank geht. Ich meine, DataBinding soll beide Möglichkeiten abdecken. – lostiniceland

+0

Ja, es kann mithilfe des Parse-Ereignisses zurück in eine Zeichenfolge umgewandelt werden. Ich habe das Beispiel aktualisiert, um dies zu zeigen. –

-1

Was es in der datarow ist, die oder nicht bestimmt, ob der cb überprüft werden? Ist es, wenn der Wert der Zelle nicht DBNULL.value ist?

+0

Dies ist keine Antwort. Es ist angemessener als Kommentar. – ricksmt

+0

Sorry, Ricksm. Punkt genommen. – aape