2013-07-03 59 views
1

我想在asp.net web窗體應用程序中使用GridView設置ObjectDataSource。我打算使用爲ObjectDataSource選擇命令通過用存儲過程查詢數據庫,像這樣返回DataTable:ObjectDataSource存儲過程參數來自一個方法嗎?

public DataTable GetProductsById(string ids = null) 
     { 

      DataTable productDataTable = new DataTable(); 

      // Stored procedure (sqldb server) is executed here 
      SqlCommand cmd = new SqlCommand("GetProductByIdsRML_CLR", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      SqlParameter myParam = new SqlParameter("@ids", SqlDbType.NVarChar); 
      myParam.Value = (ids); 
      cmd.Parameters.Add(myParam); 
      SqlDataAdapter dataAdapter = new SqlDataAdapter(); 
      dataAdapter.SelectCommand = cmd; 

      dataAdapter.Fill(productDataTable); 

      return productDataTable; 
     } 

該方法將作爲一個參數的字符串即以逗號分隔的產品ID的列表,該參數被傳遞給存儲過程,然後執行查詢。不過,我無法正確設置它,因爲通過代碼中的另一種方法將此輸入ids傳遞給此方法。這裏存在這個問題,因爲當試圖設置ObjectDataSource時,它會詢問存儲過程的參數應該來自哪裏,但「另一種方法」不是一個選項。以下是我正在談論的內容: Choosing parameters for objectdatasource

這些選項似乎都沒有包含「此項目中的另一種方法」。如果有人知道在這種情況下要做什麼,那會很棒。另外,如果從存儲過程返回DataTable不是一個好主意,那也可以,我可以很容易地更改它,但問題仍然存在。謝謝!我覺得有一個非常簡單的解決方案...

回答

1

我整理出了這得益於本教程在MSDN上:

http://msdn.microsoft.com/en-us/library/aa581787.aspx

向它展示瞭如何實現我想要的代碼做了文章的末尾。您可以選擇從下拉菜單中「無」,並把該參數在後面的代碼中Selecting事件爲ObjectDataSource,礦山看起來像這樣:

protected void ObjectDataSource1_Selecting(object sender, 
              ObjectDataSourceSelectingEventArgs e) 
     { 
      e.InputParameters["ids"] = SearchResults.idList; 
     } 

哪裏idList是用逗號分隔的,我需要的字符串列表傳遞給存儲過程。只要每次定義idList字段,GridView + ObjectDataSource就會處理剩下的事情。

0

一個選項將使用Session,然後消耗PageOnLoadComplete方法,並在那裏設置Session變量。

protected override void OnLoadComplete(EventArgs e) 
{ 
    ... 
} 
+0

感謝您的快速回復。我想過做這樣的事情(將它存儲在'Session'中),但我認爲它可能不是最好的想法,因爲這個參數將會是一串數千個字符的字符串,會話似乎不是最好的地方對於類似的東西... – akowalz

+0

@akowalz,如果您願意,可以使用「Cookie」,但我不會說容易清理的數千字節的數據可能是一個問題。 –