2010-11-21 7 views
1

J'ai implémenté des lignes cliquables dans datagrid en utilisant ajax. Le problème est que lorsque je clique sur la ligne dans la page Résultats, je redirige vers une autre page pour voir les données. Dans cette page, j'ai un bouton "mise à jour" que je peux mettre à jour les données dans le tableau dans la base de données et quand je clique dessus, je redirige vers la page de résultats, puis cliquez sur la même ligne pour voir ses détails. mis à jour et ses données encore anciennes. Le fait est que les données sont mises à jour dans la table dans la base de données, c'est comme si la page sauvegardait les anciennes données qu'il avait et utilisait et je ne sais pas comment lui dire d'apporter de nouvelles données.lignes cliquables dans datagridview dans asp.net en utilisant ajax

Voici le code pour faire des lignes cliquables:

protected void pendingGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.Attributes.Add("onclick", "return GetDataUsingAJAX(" + e.Row.RowIndex + ",'pending');"); 
      e.Row.Attributes.Add("style", "cursor:hand"); 
     } 
    } 

est le javascript ici de la page des résultats:

function GetDataUsingAJAX(row, table) { 
     obj = new XMLHttpRequest(); 
     if (obj != null) { 
      obj.onreadystatechange = RedirectToViewDetails; 
      obj.open("GET", "Results2.aspx?row=" + row + "&table=" + table, true); 
      obj.send(null); 
     } 
     return false; 
    } 


    function RedirectToViewDetails() { 

     if (obj.readyState == 4) { 
      if (obj.status == 200) { 
       var retval = obj.responseText.split("&"); 
       window.location = "YellowCardStart.aspx?mode=" + retval[0] + "&cntct=" + retval[1] + "&strtDate=" + retval[2] + "&endDate=" + retval[3] + "&strtTime=" + retval[4] + "&endTime=" + retval[5] + "&tools=" + retval[6] + "&id=" + retval[7] + "&table=" + retval[8] + "&bldng=" + retval[9] + "&loc=" + retval[10] + "&devTool=" + retval[11] + "&cmpny=" + retval[12] + "&phn=" + retval[13] + "&lssApp=" + retval[14] + "&ehsApp=" + retval[15] + "&cmnts=" + retval[16] + "&created=" + retval[17];    } 
      else { 
       alert("Error retrieving data!"); 
      } 
     } 
    } 

Et voici le code page_load des résultats:

if (Request.QueryString["row"] != null) 
     { 
      Response.Clear(); 
      if (Request.QueryString["table"] != null) 
      { 
       DataTable dt = new DataTable(); 
       if (Request.QueryString["table"] == "fa") 
       { 
        dt = DataAccessLayer.selectFromTable(Int32.Parse(activeFAGrid.Rows[Int16.Parse(Request.QueryString["row"])].Cells[0].Text), "active"); 
        Response.Write(dt.Rows[0][1].ToString() + "&" + dt.Rows[0][2].ToString() + "&" + dt.Rows[0][3].ToString() + "&" + dt.Rows[0][4].ToString() + "&" + dt.Rows[0][5].ToString() + "&" + dt.Rows[0][6].ToString() + "&" + dt.Rows[0][7].ToString() + "&" + dt.Rows[0][0].ToString() + "&" + "active" + "&" + dt.Rows[0][8].ToString() + "&" + dt.Rows[0][9].ToString() + "&" + dt.Rows[0][10].ToString() + "&" + dt.Rows[0][11].ToString() + "&" + dt.Rows[0][12].ToString() + "&" + dt.Rows[0][13].ToString() + "&" + dt.Rows[0][14].ToString() + "&" + dt.Rows[0][15].ToString() + "&" + dt.Rows[0][16].ToString()); 
       } 
Response.End(); 
      } 
     } 

La fonction SelectFromTable récupère les données du DB.

L'aide sera vraiment appriciée, je suis vraiment perdu.

Merci à l'avance,

Greg

Répondre

1

Je pense que vous trouverez que votre navigateur met en cache la réponse de votre appel AJAX, essayez d'utiliser POST au lieu de GET pour votre appel AJAX.

+0

J'ai essayé de l'exécuter en utilisant "POST". Je vois que cela peut fonctionner sur mon pc mais quand je publie le site et l'exécute depuis le serveur, ça ne marche pas, il échoue sur le if (obj.status == 200). Le serveur a installé l'explorateur 6, Windows Server 2003, Visual Studio 2008 SP1. Peut-il y avoir un problème avec l'explorateur installé sur le serveur? Bien que je cours l'application de mon PC qui a Explorer 8. –

0

Juste pour vous le savez, il a travaillé avec « POST » mais je devais supprimer ces 2 lignes pour que cela fonctionne:

obj.setRequestHeader("Content-length", params.length); 
    obj.setRequestHeader("Connection", "close"); 

(peut-être seulement de retirer la 2ème ligne pourrait être suffisant)

Questions connexes