2012-11-16 84 views
0

我正在制定一個指標屏幕,該屏幕將根據數據庫中的不同組顯示多個圖表。它的一部分使用隱藏選定圖表的功能,直到用戶單擊以顯示它們。避免刷新數據綁定下拉列表

問題是這樣的:我在下拉列表中使用了一個Databind,所以每次我選擇一個新組時,頁面都會刷新,並且所有內容都會返回到默認狀態。

我的問題是:有沒有一種方法可以避免在每次從下拉列表中選擇新選項時刷新頁面?如果是這樣,怎麼樣?如果沒有,是否有更好的方式來創建下拉列表並附加值?如果我將AppendDataBoundItems設置爲false,那麼我總是將所選值作爲列表中的第一項。

這裏是我的下拉列表代碼:

<asp:DropDownList ID="MinistryDropdown" OnSelectedIndexChanged="Selection_Change" AutoPostback="true" AppendDataBoundItems="true" runat="server"/> 

然後它背後的C#代碼是這樣的:

public void Page_Load(object sender, EventArgs e){ 
    MinistryDropdown.DataSource = CreateDataSource(); 
    MinistryDropdown.DataTextField = "Description"; 
    MinistryDropdown.DataValueField = "Description"; 
    MinistryDropdown.DataBind(); 

...other code here... 
} 
ICollection CreateDataSource(){ 
    DataTable Ministries = new DataTable(); 

    Ministries = oDatabase.GetData(@"SELECT DISTINCT B.Description 
     FROM tblInvolvement AS A LEFT JOIN tblMinistries AS B 
     ON A.Activity = B.MinistryID"); 

    DataView dv = new DataView(Ministries); 
    return dv; 
} 
+0

如果您關心的頁面刷新,只是使用ajax。 – Xaisoft

+0

我會試一試,謝謝。 – ijb109

+0

我可能會離開商標,但問題是你沒有'if(!IsPostBack)'?這聽起來像你說的一切刷新,你不想要它,對吧? – zimdanen

回答

1

嘗試使用ASP.NET的UpdatePanel。只需將你的DropDownList包裝進去,它就可以工作。這是一個我沒有測試的簡單例子。

<asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager> 
<asp:UpdatePanel runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:DropDownList ID="MinistryDropdown" OnSelectedIndexChanged="Selection_Change" AutoPostback="true" AppendDataBoundItems="true" runat="server"/> 
    </ContentTemplate> 
</asp:UpdatePanel> 

最後,您很快會發現此解決方案的侷限性,稍後您可能更願意使用Javascript。

+0

我現在正在嘗試這個。 – ijb109

+0

好的,所以我這樣做了,但現在圖表沒有更新。我通過代碼進行調試,並且當我更改下拉選擇時,c#運行正常(它獲取所有正確的值),但圖表不顯示更改。我覺得我在這裏錯過了一些簡單的東西。 – ijb109

+0

但是,它讓隱藏區域保持隱藏,所以謝謝。我會從這裏解決它,並可能使用JS或嘗試一種不同於C#的方式。 – ijb109

0

我認爲這個問題是你重新綁定在Page_Load中的數據,但你不檢查,如果!IsPostBack換句話說,你的代碼應該是這樣的:

public void Page_Load(object sender, EventArgs e){ 
    if(!IsPostBack) 
    { 
     MinistryDropdown.DataSource = CreateDataSource(); 
     MinistryDropdown.DataTextField = "Description"; 
     MinistryDropdown.DataValueField = "Description"; 
     MinistryDropdown.DataBind(); 

     ...other code here... 
    } 
} 
+0

我其實早些時候嘗試過,但當我在下拉列表中選擇新值時,圖表就消失了。我對ASP不是很熟悉,所以我可能會把整個事情搞錯。 – ijb109