Je publie cette question après avoir lu d'autres questions similaires à propos de mon problème mais sans vraiment comprendre comment je peux utiliser l'information.Utilisation de SqlDataAdapter.Update et de RowUpdating pour mettre à jour une base de données à partir d'une grille
J'ai principalement écrit ce code pour voir comment je peux utiliser SqlDataAdapters pour mettre à jour une base de données à partir d'un GridView.
Je vous écris mon GridView dans ma page aspx comme suit:
<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>
Puis dans mon code derrière le fichier que je vous écris le code suivant (base de données est juste une classe pour se connecter à ma base de données ...) :
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();
Tout cela fonctionne très bien jusqu'à présent; Les fonctions GridView Sorting, Editing, RowCancellingEdit, PageIndexChanging etc fonctionnent comme ils devraient le faire.
Mon problème est lorsque j'appelle la fonction RowUpdating.
Ce que je veux faire est d'utiliser la fonction adapter.Update()
pour mettre à jour la base de données.
Il ne jette aucune erreur avec mon code actuel, mais il ne met pas à jour la base de données non plus.
Dès que je clique sur mettre à jour, la zone de texte d'édition de ma GridView disparaît et il me reste la valeur d'origine avant d'essayer de l'éditer.
Ceci est ma fonction row_updating()
:
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();
}
Je ne peux pas comprendre pourquoi il ne sera pas à jour la base de données (probablement parce que je fais complètement faux)
J'ai vu des choses autour l'Internet qui mentionne une fonction EndEdit()
, mais je ne suis pas sûr si cela s'applique ici.
Si quelqu'un pouvait me dire ce que je fais de mal et pourquoi ma base de données ne serait pas mise à jour, ce serait très apprécié.
J'ai essayé d'utiliser l'adaptateur .UpdateCommand = builder.GetUpdateCommand(); comme ils l'ont fait dans le lien, mais j'ai toujours les mêmes résultats. –