2010-09-14 6 views
1

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(); 
} 
+1

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. –

+1

Que fait votre fonction 'dataBind();'? –

+0

qu'avez-vous fait pour corriger cet im ayant le même problème – ONYX

Répondre

1

Renforcez-vous votre publication GridView en erreur par erreur? Vous ne devez récupérer les données de la base de données sur la charge initiale:

if (!IsPostBack) 
{ 
    Gridview1.Datasource = BLL.SomeClass.Load(SomeRecordId); 
    GridView1.DataBind(); 
} 
+0

Oui c'est ça. Il fonctionne maintenant je vais le marquer comme correct après les 10 min requis. attendez. – 182764125216

1

RowUpdating et RowUpdated le feu à des moments différents. Voyez si ce n'est pas votre problème.

+0

Oui, je l'ai déjà vérifié. J'ai d'abord eu le mauvais hier, mais j'ai déjà réglé ce problème. Merci pour le conseil. – 182764125216

1

Essayez d'utiliser la méthode suivante pour obtenir vos nouvelles valeurs:

//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; 

string Item = e.NewValues["Item"].ToString(); 
string Family = e.NewValues["Family"].ToString(); 
string Structure = e.NewValues["Structure"].ToString(); 
+0

J'ai essayé cela avant aussi, mon e.NewValues.Count renvoyait 0 alors je suis passé à cette façon que j'ai trouvé dans l'exemple MSDN Library. – 182764125216

Questions connexes