Заголовок DDL в Gridview на ispostback - PullRequest
0 голосов
/ 27 апреля 2018

В моем виде сетки есть заголовок DDL, который по какой-то причине не сохраняет выбранное значение, а привязывает вид сетки и заголовок обратно к " начальная позиция "

В моем заголовке DDL для Приоритет я выбрал значение '99', но после этого мой заголовок возвращается к начальной позиции моего ListItem (то есть Приоритета)

enter image description here

enter image description here

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

У меня есть RowDatabound для сетки, но там я больше ничего не делаю, потом нахожу 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();
    }
} 

Может ли быть так, что я ограничиваю свой DDL каждый раз для моего gridview? я застрял здесь ....

1 Ответ

0 голосов
/ 27 апреля 2018

Вам необходимо сохранить ddlPriority выделенный текст в временном месте, например ViewState, который будет сохранять значение между постбэками.

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

и aftrt 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;
}

Проверьте это полный пример для более подробной информации

...