2011-08-30 69 views
0

我在試圖找到獲取數據綁定控件值的最佳做法。我的應用程序現在(通常)的工作方式是在頁面加載時調用getSettings()或其他方法,併爲每個DropDownLists或Repeater進行數據庫調用。在頁面加載時沒有數據庫調用綁定數據

在這個特殊場合,我根據點擊哪個按鈕將數據綁定到DropDownList。在數據顯示出來之前有一段延遲,當應用程序進入數據庫並獲取所需的信息時。

我想知道是否有更好的方法來處理獲取值,也許沒有每次頁面加載時進行數據庫調用。我已經包含了一些示例代碼以防萬一。

的.aspx:

<asp:DropDownList ID="ddl" runat="server"></asp:DropDownList> 
<asp:Button ID="btn1" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table1" /> 
<asp:Button ID="btn2" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table2" /> 
<asp:Button ID="btn3" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table3" /> 
<asp:Button ID="btn4" runat="server" OnCommand="btn_Command" CommandName="change" CommandArgument="table4" /> 

代碼隱藏:

DBClass dbc = new DBClass(); 

protected void btn_Command (object sender, CommandEventArgs e){ 
    if (e.CommandName == "change"){ 
     ddl.DataSource = dbc.ExecuteQuery("SELECT * FROM " + e.CommandArgument); 
     ddl.DataTextField = "Text"; 
     ddl.DataValueField = "Value"; 
     ddl.DataBind(); 
    } 
} 

有什麼辦法來緩存結果?我知道這是一個粗糙的,因爲它只有一個DropDownList,但即使每個按鈕都有一個,是否有某種方式可以在不進行4次數據庫調用的情況下獲取數據?

在此先感謝。

回答

0

找到一種方法來使用jQuery ajax來做到這一點。我點擊一個按鈕客戶端,它吐出我需要在一個WebMethod一些HTML服務器端格式化的值。多一點工作,但刪除所有回傳並加載我不需要或使用的回傳。

謝謝大家!

+0

我想要做一些像你一樣的事情,請檢查一下這個wuestion和adn幫助我。 http://stackoverflow.com/q/11151806/1321748 – 2012-06-22 07:30:22

0

您可以簡單地將這些值存儲在應用程序變量中,並在Application_Startup上僅檢索一次。請參閱Microsoft中的一些簡單示例。

的Global.asax

protected void Application_Start(object sender, EventArgs e) 
{ 
    DBClass dbc = new DBClass(); 
    Application["table1"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table1"); 
    Application["table2"] = dbc.ExecuteQuery<TResult>("SELECT * FROM table2"); 
    // ... 
} 

代碼隱藏

protected void btn_Command (object sender, CommandEventArgs e) 
{ 
    if (e.CommandName == "change") 
    { 
     ddl.DataSource = Application[e.CommandArgument] as IEnumerable<TResult>; 
     ddl.DataTextField = "Text"; 
     ddl.DataValueField = "Value"; 
     ddl.DataBind(); 
    } 
} 
0

你可以改變你的查詢返回多個結果集,並將結果填充到數據集。加載DataSet後,可以將DataSet中的每個DataTable綁定到相應的DropDown。

如果需要,您還可以緩存結果或將它們置於應用程序狀態。我仍然會考慮合併查詢。

相關問題