Ich poste diese Frage, nachdem ich andere ähnliche Fragen über mein Problem gelesen habe, aber nicht wirklich verstehe, wie ich die Informationen verwenden kann.Verwenden von SqlDataAdapter.Update und RowUpdating zum Aktualisieren einer Datenbank aus einer Gridview
Ich habe hauptsächlich diesen Code geschrieben, um zu sehen, wie ich SqlDataAdapter verwenden kann, um eine Datenbank von einem GridView zu aktualisieren.
Ich schreibe meine Gridview in meiner aspx Seite wie folgt:
<asp:GridView ID="Clients" runat="server">
<Columns>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<ItemTemplate>
<asp:Label ID="labelName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="textboxName" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField EditText="Edit" ShowEditButton="true" />
</Columns>
</asp:GridView>
Dann in meinem Code hinter Datei Ich schreibe den folgenden Code (Datenbank ist nur eine Klasse zu meiner Datenbank zu verbinden ...) :
Database database = new Database();
database.open_connection();
SqlCommand command = new SqlCommand(query, database.dbConnection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
Clients.AutoGenerateColumns = false;
Clients.PageIndexChanging += new GridViewPageEventHandler(this.grid_view_page_index_changing);
Clients.Sorting += new GridViewSortEventHandler(this.grid_view_sorting);
Clients.RowEditing += new GridViewEditEventHandler(this.row_editing);
Clients.RowUpdating += new GridViewUpdateEventHandler(this.row_updating);
Clients.RowCancelingEdit += new GridViewCancelEditEventHandler(this.row_canceling_edit);
Clients.AllowPaging = true;
Clients.PageSize = 25;
Clients.AllowSorting = true;
Clients.DataSource = dataTable;
Clients.DataBind();
database.close_connection();
Das alles funktioniert soweit; Die GridView-Sortier-, Editier-, RowCancellingEdit-, PageIndexChanging-Funktionen usw. funktionieren wie sie sollten.
Mein Problem ist, wenn ich die RowUpdating-Funktion aufrufen.
Was ich tun möchte, ist die adapter.Update()
Funktion, um die Datenbank zu aktualisieren.
Es wirft keine Fehler mit meinem aktuellen Code, aber es aktualisiert auch nicht die Datenbank.
Sobald ich auf update klicke, verschwindet das Bearbeitungsfeld aus meiner GridView und ich habe den ursprünglichen Wert, bevor ich versuche, es zu bearbeiten.
Dies ist meine row_updating()
Funktion:
public void row_updating(object sender, GridViewUpdateEventArgs e) {
GridViewRow gvr = gridView.Rows[Clients.EditIndex];
TextBox txt = (TextBox)gvr.Cells[0].FindControl("textboxName");
e.NewValues["Name"] = txt.Text;
adapter.Update((DataTable)Clients.DataSource);
Clients.EditIndex = -1;
Clients.DataBind();
}
ich kann nicht herausfinden, warum es nicht die Datenbank aktualisieren (wahrscheinlich, weil ich es völlig falsch tue)
ich Sachen gesehen haben, um das Internet, das eine EndEdit()
Funktion erwähnt, aber ich bin mir nicht sicher, ob das hier gilt.
Wenn mir jemand sagen könnte, was ich falsch mache und warum meine Datenbank es nicht aktualisiert, wäre es sehr zu schätzen.
Ich habe versucht, Adapter .UpdateCommand = builder.GetUpdateCommand(); wie in der Verbindung, aber ich bekomme immer noch die gleichen Ergebnisse. –