TextBox an Datenquelle binden

Deletemaster

Erfahrenes Mitglied
Hallo,
ich versuche mein UPDATE-Command zu vereinfachen, indem ich mit einem DataSet und einer DataTable arbeite.
Allerding lässt sich hier nicht so "einfach" wie bei WindowsForms die TextBox an die Datenquelle binden:

txt_Vorname.DataBindings.Add("Text", dt, "vorname"); funktioniert nicht

Code:
private void btn_Verbinden_Click(object sender, System.EventArgs e)
{
	string str_VRN = txt_VRN.Text;
	string selStr = "SELECT * FROM Tabelle WHERE vrn = '" + str_VRN + "'";

	OdbcCommand cmd = new OdbcCommand(selStr, conn);
	OdbcDataAdapter da = new OdbcDataAdapter(cmd);
	DataSet ds = new DataSet();

	conn.Open();
	da.Fill(ds, "Tabelle");
	conn.Close();

	DataTable dt = ds.Tables["Tabelle"];
//	dt.Columns.Add("vorname", Type.GetType("System.String"));
//	txt_Vorname (hier soll der Wert des Feldes "vorname" aus der "Tabelle" zugewiesen werden
}

Wie kann ich hier meiner TextBox den Wert zuweisen?
Danke für Eure Hilfe
 

ksk

Erfahrenes Mitglied
Hy!
Ich hätte in VB eine Lösung dafür, bzw. zwei.
Habe dafür deine Methode in Klassen und Funktionen geändert.


1. Einfachheitshalber erstelle dir ein Funktion in einer Klasse oder auf der Seite wo das Steuerelement eingebunden werden soll.
Vorgehensweise: Die Funktion "GetConnString" liefert wie der Name schon sagt den ConnectionString zurück.
Dann befüllst du einen DataTable mit dem DataAdapter und gibst die fertige Tabelle wieder zurück.
Code:
    Public Shared Function Abfragen(ByVal strQuery As String) As DataTable
        Dim dTable As New DataTable
        Dim con As New SqlConnection(GetConnString)
        Dim dAdapter As New SqlDataAdapter(strQuery, con)
        Try
            con.Open()
            dAdapter.Fill(dTable)
        Catch ex As Exception
            'Gebe Meldung aus oder mach was
        Finally
            If con.State = ConnectionState.Open Then con.Close()
        End Try
        Return dTable
    End Function

Dann dein Abschnitt wo etwas passieren soll. Hier holst du die Tabelle welche dir die Funktion zurückgibt und gehst die Spallten durch.
Code:
        Dim dt As DataTable
        dt= Abfragen("SELECT * FROM Tabelle WHERE vrn = '" & str_VRN & "'")
            Dim id,  As Integer         'als bsp.
            Dim vn, nn As String
            
            id = CInt(dt.Rows(0).Item("int_ID"))
            vn = CStr(dt.Rows(0).Item("str_VRN "))
            nn = CStr(dt.Rows(0).Item("str_NN "))
'oder
           txt_Vorname.text = CStr(dt.Rows(0).Item("str_NN "))
'usw
...
Du kannst auch statt Variablen auch die Spallten an die Steuerelemente anbinden.


2. Du verwendest einen DataGrid mit den benötigten Spallten und mit einem nicht typisierten DataSet. Im DataGrid kannst beim ändern der Vorlagenspallten, jedes Steuerelement auf gewisse Eigenschaften direkt anbinden.
Als Bsp. zum einbinden eines Steuerlements
Code:
DataBinder.Eval(Container.DataItem, "pVorname")
Wobei pVorname, die Property von deiner Klasse sein sollte.
Dazu müsstest du für deine Tabelle eine Klasse erstellen und den obigen Abschnitt an eine ArrayList übergeben welches dan ein neues Obejekt der Klasse anlegt und anschliesen zur aufgerufenen Methode zurück gibt.
Code:
            Dim al As New ArrayList
            Dim zahl  As Integer = 0

        While zahlen<= dt.Rows.Count - 1           
            id = CInt(dt.Rows(zahl).Item("int_ID"))
            vn = CStr(dt.Rows(zahl).Item("str_VRN "))
...
            al.Add(New deineKlasse(id, vn, nn))
        End While
Return al
ArrayList als Datenquelle angeben und die Properties für DataValue und DatatTextField Eigenschaft festlegen.



Hoffe das hilft dir.



ksk