2010-11-21 3 views
1

ajaxを使用してDataGridでクリック可能な行を実装しました。問題は、結果ページの行をクリックすると、別のページにリダイレクトされてデータが表示されることです。そのページでは、DB内のテーブルのデータを更新できる「更新」ボタンがあります。クリックすると、結果ページにリダイレクトされ、同じ行が再度クリックされてその詳細が表示され、データは表示されません更新され、まだ古いデータです。 事は、データがDBのテーブルで更新されている、そのページのように彼が持ってきた古いデータを保存して、それを使用していると私は彼に新しいデータをもたらす方法を知らない。ここでajaxを使用してasp.netのdatagridviewでクリック可能な行

はクリッカブル行を作成するコードです:ここ

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"); 
     } 
    } 

は、結果ページのjavascriptのです:

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

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!"); 
      } 
     } 
    } 

そして、ここでは、結果のPage_Loadの内のコードです

SelectFromTable関数は、DBからデータを取得します。

ヘルプは本当にうまくいくでしょう、私は本当に失われています。事前に

おかげで、

グレッグ

答えて

1

は、私はあなたのブラウザはAJAX呼び出しの代わりにGETのPOSTを使用してみてください、あなたのAJAX呼び出しからの応答をキャッシュしていることを見つけることになると思います。

+0

"POST"を使って実行しようとしました。私はそれが私のPCで動作するかもしれないが、私はウェブサイトを公開し、サーバーからそれを実行するとき、それdoesntの仕事を参照してください、それはif(obj.status == 200)で失敗します。サーバーにはエクスプローラ6、Windows Server 2003、Visual Studio 2008 SP1がインストールされています。サーバーにインストールされているエクスプローラに問題がありますか?エクスプローラ8を持っている私のPCからアプリケーションを実行しますが。 –

0

ちょうどあなたが知っているように、それは「POST」を使用して働いていたが、私はそれが動作するため、これらの2行削除する必要がありました:

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

を(おそらく唯一の2行目を削除すると十分にすることができる)

関連する問題