Header ispostback 上 Gridview 中的 DDL

Header DDL in Gridview on ispostback

我的 gridview 中有一个 header DDL,由于某种原因,它没有保留我选择的值,而是将 gridview 和 header 绑定回“起始位置"

在我的 Priority 的 DDL header 中,我选择了值“99”,但在那之后我的 header 回到了我的 ListItem(即优先级)

    <HeaderTemplate>
<asp:DropDownList ID="ddlPriorityHeader" AutoPostBack="True" AppendDataBoundItems="True" OnSelectedIndexChanged="ddlHeader_SelectedIndexChanged" runat="server">
                                 <asp:ListItem>Priority</asp:ListItem>
                            </asp:DropDownList>
                        </HeaderTemplate>

我有一个用于 gridview 的 RowDatabound,但我什么也没做,然后找到 header 的 DDL,然后绑定 DDL。

protected void gwActivity_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //.............. some code.....//

 string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
                    using (SqlConnection con = new SqlConnection(CS))
                {
                    SqlCommand cmd = new SqlCommand("SELECT  DISTINCT [Priority] FROM [BI_Planning].[dbo].[tblPriority]", con);
                    con.Open();
                    ddlPriority.DataSource = cmd.ExecuteReader();
                    ddlPriority.DataTextField = "Priority";
                    ddlPriority.DataBind();
                }

}

我已经把我的 gridview 放在一个方法中:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindGridviewActivity();
    }
} 

难道我每次都为我的 gridview 绑定我的 DDL?我被困在这里....

您需要将 ddlPriority 选定的文本存储在像 ViewState 这样的临时位置,这将在回发之间保持价值。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ViewState["PriorityText"] = "Priority";
        BindGridviewActivity();
    }
}

然后 ddlPriority.DataBind(); 将所选文本设置为 ViewState

ddlPriority.Items.FindByText(ViewState["PriorityText"].ToString()).Selected = true;

并在您的 ddlHeader_SelectedIndexChanged 中将 ViewState 设置为选定的文本

protected void ddlHeader_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddlHeader = (DropDownList)sender;
    ViewState["PriorityText"] = ddlHeader.SelectedItem.Text;
}

查看此 complete example 了解更多详情