DataBinding: Wert darf nicht null sein

Deletemaster

Erfahrenes Mitglied
Hallo zusammen,
folgendes problem:

DataSet ds = new DataSet();

DataTable table = ds.Tables["table"];

txt_Vorname.DataBindings.Add("Text", table,"nachname");

ich bekomme folgende Fehlermeldung:
Wert darf nicht null sein.
das Feld ist aber nicht leer oder null?
 

JensG

Erfahrenes Mitglied
Hallo deletemaster,

du deklarierst und instanzierst ein neues Dataset, welches natürlich
komplett leer ist und keine einzige Tabelle erhält.
Jedenfalls ist das so wenn das dein kompletter Code dazu ist.

Du musst dein Dataset erst mit Hilfe eines DataAdapters füllen und
dann kannst du dieses direkt oder von mir aus ein DataTable zum
Binden an die TextBox nutzen.

Gruß
Jens
 

Deletemaster

Erfahrenes Mitglied
Den Adapter habe ich nicht vergessen...:

da = new OdbcDataAdapter("SELECT * FROM winners49 WHERE vrn='" + such_vrn +" ' ", conn);
OdbcCommandBuilder cb = new OdbcCommandBuilder(da);

DataSet ds = new DataSet();

da.Fill(ds, "winners49");
conn.Close();

DataTable dt = ds.Tables["winners49"];

// checkbox_Robinson.DataBindings.Add("int", dt, "robinsonliste");
// radioButton_Variante_1.DataBindings.Add("1", dt, "variante_1");

Allerdings sollte ja ein Update möglich sein, d.h. ich müsset diese sache irgendwie in den EventHandler packen (checkbox_Robinson_Changed()

die restlichen Felder TextBoxen werden gefüllt
 

JensG

Erfahrenes Mitglied
Hallo deletemaster,

das hat doch gar nix mit deiner Ausgangsfrage in diesem Thread zu tun !

Aber gut hier mal ein Beispiel in VB.NET wie du eine Checkbox binden kannst.


Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       'Das erstellen der Connection etc. hab ich jetzt hier
       'weggelassen        

        Dim ds As DataSet = New DataSet

        da.Fill(ds, "artikel")

        Dim dt As DataTable = ds.Tables("artikel")

        Me.TextBox1.DataBindings.Add("Text", dt, "bezeichnung")

        'checkbox_Robinson.DataBindings.Add("int", dt, "robinsonliste");
        'radioButton_Variante_1.DataBindings.Add("1", dt, "variante_1");

        Dim bnd_chk As Binding = New Binding("CheckState", dt, "srpflicht")
        ' Formatierungs- und Parse-Handler 
        AddHandler bnd_chk.Format, AddressOf IntToChecked
        AddHandler bnd_chk.Parse, AddressOf CheckedToInt
        Me.CheckBox1.DataBindings.Add(bnd_chk)


    End Sub
    Private Sub IntToChecked(ByVal sender As Object, ByVal cevent As ConvertEventArgs)
        If cevent.Value Is System.DBNull.Value Then
            cevent.Value = CheckState.Indeterminate
        Else
            Select Case CInt(cevent.Value.ToString)
                Case 0
                    cevent.Value = CheckState.Unchecked
                Case 1
                    cevent.Value = CheckState.Checked
                Case Else
                    cevent.Value = CheckState.Indeterminate
            End Select
        End If
    End Sub


    Private Sub CheckedToInt(ByVal sender As Object, ByVal cevent As ConvertEventArgs)
        Select Case True
            Case CType(cevent.Value, Integer) = CheckState.Unchecked
                cevent.Value = 0
            Case CType(cevent.Value, Integer) = CheckState.Checked
                cevent.Value = 1
            Case CType(cevent.Value, Integer) = CheckState.Indeterminate
                cevent.Value = System.DBNull.Value
        End Select
    End Sub

Das ganze sollte sich leicht nach C# umschreiben lassen.

Jens