避免在Databound下拉列表中刷新

时间:2012-11-16 20:22:53

标签: c# asp.net data-binding

我正在开发一个指标屏幕,该屏幕将根据数据库中的不同组显示多个图表。它的一部分使用隐藏选定图表的功能,直到用户点击显示它们。

问题在于:我在下拉列表中使用了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;
}

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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...
   }
}