2013-06-18 52 views
0

因此,對於一個項目,我試圖從數據庫中檢索一個值,並在單擊編輯按鈕時將其存儲在佔位符中。我已經嘗試了許多事情來實現這個功能,但它只返回第一行第一列的值。我希望它從我選擇編輯的行返回值。這是我迄今在代碼背後的。使用OleDB檢索數據庫中的行

protected void grdEditPersonnel_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Edit") 
    { 
     //sets the value of the row selected for possible use?? 
     int index = Convert.ToInt32(e.CommandArgument); 
     GridViewRow selectedRow = grdEditPersonnel.Rows[index]; 

     try 
     { 

      OleDbConnection connection = new OleDbConnection(ConfigurationManager.ConnectionStrings["RiskManager_DBConnectionString"].ConnectionString); 
      OleDbCommand command = new OleDbCommand("SELECT [ID] FROM [tblProjects]", connection); 

      connection.Open(); 
      OleDbDataReader reader = command.ExecuteReader(CommandBehavior.SingleRow); 

      while (reader.Read()) 
      { 
       //sends the value of the ID to the Project ID Place Holder 
       Session["ProjIDPH"] = reader.IsDBNull(reader.GetOrdinal("ID")) ? null : 
              reader["ID"].ToString(); 
      } 

      reader.Close(); 

      //Redirects user to the Add Project page 
      Response.Redirect("frmProjects.aspx"); 
     } 
     catch 
     { 

     } 
    } 
} 
+3

你怎麼看CommandBehavior.SingleRow呢? – Tim

+1

你的sql字符串沒有where子句。 –

+0

我知道它做了什麼,我的問題是它不能正常工作。另外,就WHERE子句而言,我已經嘗試了很多事情,包括使用行號,但似乎並不奏效。我應該如何設置WHERE子句? –

回答

0

您沒有使用從gridview收集的索引值(至少不是我能看到的)。你可以使用類似這樣的命令文本來選擇正確的值。

 "SELECT ID FROM tblProjects WHERE ID = " & GridView.SelectedDataKey.Value.ToString 

我會在選定的索引更改事件處理程序中爲gridview執行此操作以檢索稍後需要用於編輯按鈕的值。然後當按下編輯按鈕時,使用該值從數據庫檢索數據。

希望我完全沒有錯過這一點。

+0

這似乎是我想要去的方向,但我不確定選擇的索引更改事件處理程序應該去的位置。對不起,如果我聽起來很愚蠢,仍然是新的。另外,SelectedDataKey不適合我。我假設一旦我提供了事件處理程序,這將會出現? –

+0

非常感謝你指點我正確的方向!獲取DataKey值是解決方案!再次感謝! :) –