RowIndex/ID bei TextchangeEvent einer Textbox in Gridview Verfasst am: 09.02.2010, 07:29
Hallo zusammen,
ein GridView ist schon ne feine Sache. Leider kann es jedoch ein Endlosformular, wie es das in Access gibt, nicht so ohne weiteres nachbilden. Für alle die sich nicht so mit Access auskennen: im Prinzip ist ein Endlosformular ein Gridview. Nur mit dem kleinen feinen Unterschied das alle Daten (die vom Programmierer freigegeben sind) bearbeitet werden können, ohne vorher einen Button "Edit" oder "Bearbeiten" klicken zu müssen.
So etwas möchte ich auch in meiner Webform umsetzen. Mein Gridview ist an eine ObjectDataSource gebunden. Ich habe mehrere Datumsfelder und einige BitFelder (true/false) in meiner MSSQL Datenbank. Ziel ist es, das Gridview so zu konfigurieren, dass ich für die Datumsfelder und die BitFelder jeweils bearbeitbare Textboxen und Checkboxen habe, die ich bearbeite. Nach jeder Änderung soll die Änderung in die Datenbank geschrieben werden. Ich weiss, dass ich jede einzelne Zeile durch besagte EditButtons in den Bearbeitungsmodus setzen kann und dann über die ObjectDataSource-eigene Update Methode die Daten in die Datenbank eintragen kann. Aber ich will unnötige Klicks verhindern. Es soll eigentlich wie in Access oder auch wie ein Excelsheet sein. Jede Zelle ist frei bearbeitbar und wird gleich nach Bearbeitung abgespeichert.
Logisch in meinen Augen wäre, über das TextChangeEvent der bearbeiteten Textbox den Rowindex und die zugehörige ID/DataKey ("MRF_ID") des bearbeiteten Produkts abzurufen. Über den RowIndex kann ich die Textbox in dieser Zeile suchen und deren geänderten Inhalt auslesen. Und über die ID kann ich einen SQLUpdateBefehl an meine Datenbank schicken.
Hat jemand eine Ahnung wie ich den RowIndex und den Zugehörigen ID Wert aus meiner Webanwendung herauskitzle?
Hier mal der Code von meinem Gridview. Ich habe der Übersicht halber erst mal nur eine Textbox in eingebaut.
nach langer Suche bin ich jetzt auf die Lösung gestoßen. Der Artikel "Sofortiges Datenbankupdate mit dem Gridview-Control" , in dem die Vorgehensweise beschrieben steht, ist unter folgendem Link zu finden: http://www.devtrain.de/news.aspx?artnr=1004.
Auf meinen Code angewendet sieht das folgender Maßen aus:
Code:
Protected Sub txtBox_TestDate_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
Dim TB As TextBox = DirectCast(sender, TextBox)
Dim grd As GridView = TB.NamingContainer.NamingContainer
Dim MRFID As Integer = grd.DataKeys(DirectCast(TB.NamingContainer, GridViewRow).DataItemIndex).Value
Dim conn As New SqlConnection
conn = GetConnectionMRF()
Dim cmd As New SqlCommand("Update MRF_Single SET MRF_DateTest= CONVERT(DATETIME, @TestDate, 104) Where MRF_ID=@MRFID", conn)
cmd.Parameters.AddWithValue("@TestDate", TB.Text)
cmd.Parameters.AddWithValue("@MRFID", MRFID)
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
cmd.Dispose()
conn.Dispose()
Page.DataBind()
End Sub