J'ai un Gridview avec ces paramètres:asp.net GridView est pas mis à jour correctement
<asp:GridView runat="server" ID="ItemGrid" CssClass="Grid"
AutoGenerateColumns="false"
AutoGenerateDeleteButton="true" OnRowDeleting="RowDeleting"
AutoGenerateEditButton="true" onRowEditing="RowEdit"
OnRowCancelingEdit="CancelRowEdit" onRowUpdating="RowUpdating"
DataKeyNames="Item_ID">
<Columns>
<asp:BoundField HeaderText="Item" DataField="Item"/>
<asp:BoundField HeaderText="Family" DataField="Family"/>
<asp:BoundField HeaderText="Structure" DataField="Structure"/>
<asp:BoundField HeaderText="Updated" ReadOnly="true" DataFormatString="{0:d}" DataField="Updated"/>
</Columns>
</asp:GridView>
sur sa mise à jour appelle:
protected void RowUpdating(object sender, GridViewUpdateEventArgs e){
int Item_ID = (int)this.ItemGrid.DataKeys[e.RowIndex][0];
//Problem is something right here:
string Item = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
string Family = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
string Structure = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[3].Controls[0]).Text;
ItemTableAdapter taItem = new ItemTableAdapter();
taItem.UpdateItem(Item, Family, Structure, DateTime.Now, Item_ID);
//just a <asp:Label> for seeing some output.
Alert.Text= string.Format("Item:{0}Family:{1}Structure:{2}",Item,Family,Structure);
this.ItemGrid.EditIndex = -1;
dataBind();
}
Il génère la mise à jour/Modifier/Supprimer des boutons, ma La fonction Delete fonctionne exactement comme je le souhaite et le bouton 'Edit' génère des TextBox modifiables comme il se doit.
Mon problème est dans la partie mise à jour, l'élément de chaîne, la famille, la structure récupèrent les anciennes valeurs, pas les nouvelles valeurs que j'ai placées dans les zones de texte générées.
Si je code en dur les valeurs, elles sont mises à jour dans la base de données et le DateTime.Now
est toujours mis à jour correctement dans la base de données pour que la requête de mise à jour fonctionne.
J'ai regardé ceci/en train de tester des choses pendant quelques jours maintenant. Je suis sûr que je manque juste quelque chose de simple que j'ai oublié.
Merci pour toute aide.
Editer: Il a été répondu mais pour ceux qui étaient curieux c'est mon DataBind();
protected void dataBind()
{
ItemTableAdapter taItem = new ItemTableAdapter();
this.ItemGrid.DataSource = taItem.GetActive();
this.ItemGrid.DataBind();
}
S'il vous plaît montrer où/comment vous liez les données, je pense vous relancez les données avant que rowupdating ne soit appelé, donc il ne fait que réutiliser les anciennes données. –
Que fait votre fonction 'dataBind();'? –
qu'avez-vous fait pour corriger cet im ayant le même problème – ONYX