ASP NET MYSQL GRIDVIEW
-
Hallo Leute
ich verwende in einer ASPX ein Gridview (ASP NET 2).
Weiters den MySQL-NET-Connector von der MySQL-Seite.<asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="True" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowEditing="GridView1_RowEditing" OnRowUpdated="GridView1_RowUpdated" OnRowUpdating="GridView1_RowUpdating" OnRowCancelingEdit="GridView1_RowCancelingEdit" EnableSortingAndPagingCallbacks="True" DataKeyNames="id"> <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#EFF3FB" /> <EditRowStyle BackColor="#2461BF" /> <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" /> </asp:GridView>
Diese Fülle ich mit
string mySelectQuery = "SELECT * FROM tabelle"; MySqlConnection myConnection = new MySqlConnection(myConnectionString); MySqlDataAdapter myDataAdapter = new MySqlDataAdapter(); myDataAdapter.SelectCommand = new MySqlCommand(mySelectQuery, myConnection); MySqlCommandBuilder myCommandBuilder = new MySqlCommandBuilder(myDataAdapter); DataSet myDataSet = new DataSet(); try { //myConnection.Open(); myDataAdapter.Fill(myDataSet); myDataAdapter.Update(myDataSet); //myReader = myCommand.ExecuteReader(); // Always call Read before accessing data. GridView1.DataSource = myDataSet; GridView1.DataBind(); // always call Close when done reading. //myReader.Close(); // Close the connection when done with it. //myConnection.Close(); } catch (Exception eroor) { // Label1.Text = eroor.Message; }
Das Funktioniert auch.
Es wird dann auch ein Edit Button generiert. Wenn man auf diesen Klickt wird fonlgender Code ausgeführt.GridView customersGridView = (GridView)sender; // Get the country for the row being edited. For this example, the // country is contained in the seventh column (index 6). GridView1.EditIndex = (int)e.NewEditIndex; Label3.Text = customersGridView.Rows[e.NewEditIndex].Cells[5].Text; string mySelectQuery = "SELECT * FROM tabelle"; MySqlConnection myConnection = new MySqlConnection(myConnectionString); MySqlDataAdapter myDataAdapter = new MySqlDataAdapter(); myDataAdapter.SelectCommand = new MySqlCommand(mySelectQuery, myConnection); MySqlCommandBuilder myCommandBuilder = new MySqlCommandBuilder(myDataAdapter); //myDataAdapter.UpdateCommand = ""; DataSet myDataSet = new DataSet(); try { //myConnection.Open(); myDataAdapter.Fill(myDataSet); myDataAdapter.Update(myDataSet); //myReader = myCommand.ExecuteReader(); // Always call Read before accessing data. GridView1.DataSource = myDataSet; GridView1.DataBind(); // always call Close when done reading. //myReader.Close(); // Close the connection when done with it. //myConnection.Close(); GridView1.EditIndex = (int)e.NewEditIndex; } catch (Exception eroor) { // Label1.Text = eroor.Message; }
Dadurch ändert sich diese Zeile im Gridview und man kann die Einträge ändern.
Wie komme ich aber jetzt auch diese änderungen?Klickt man dann auf Aktualisieren
GridView customersGridView = (GridView)sender; GridViewRow row = customersGridView.SelectedRow; GridView1.EditIndex = -1; int index = GridView1.EditIndex; Label3.Text = "Updated record " + row.Cells[5].Text + "."; Label3.Text = customersGridView.Rows[index].Cells[5].Text; GridView1.EditIndex = -1;
Es steht für diese Zeile in row oder Rows nichts drin. Leer.
Nehme ich index + 1 bekomme ich die nachvollgende Zeile und da stehen die Daten drin. Nur eben nicht für die editierte.Hat jemand eine Ahnung?
Ich will nicht vorher schon ein UPDATE-SQL gemerieren weil man dann die Spaltennamen angeben muss. Da ich aber ein SELECT * machen sind mir die Spaltennamen egal da sich das ja auch ändern kann. Da ich beim Ändern der Tabelle diese Angeben muss weiß ich. Ich stelle mir dann aber den UPDATE anhand der geänderten Werte aus der Seite zusammen weil diese dann aus einer anderen Klasse kommen um eben flexible zu sein.
Ich möchte ja nicht für jede Tabelle ein eigenes Gridview definieren.
Das Gridview stellt die Daten ja auch dar egal welche Tabelle ich abfrage.
Im Grunde soll es sowas wie phpmyadmin eben für ASPNET werden.Das Gridview im Browser wird einfach nur als Tabelle dargestellt. Jedoch ohne FORM etc.
Danke
-
Das habe ich auch schon versucht. Habs leider aufgeben müssen. Im Web ist immer nur davon die Rede das man die Spaltennamen kennt.
Leider.
-
habe mich nochmals damit beschäftig.
Label3.Text = ((TextBox)customersGridView.Rows[index].Cells[5].Controls[0]).Text;
so kommt man zu den daten.
Controls[0] belibt. Ist vermutlich das Editfeld.