Результаты фильтра Gridview изменяются после вызова ModalPopUpExtender - PullRequest
1 голос
/ 11 августа 2011

У меня есть сетка, которая фильтруется с помощью выпадающего списка. В gridview есть LinkButtons, которые вызывают ModalPopUpExtender для отображения данных. После фильтрации вида сетки и нажатия кнопки LinkButton отфильтрованные результаты GridView изменяются, и данные становятся неверными.

<asp:DropDownList ID="ddl_temp" runat="server" AutoPostBack="True" 
                    onselectedindexchanged="ddl_temp_SelectedIndexChanged">
                    <asp:ListItem>Select Status</asp:ListItem>
                    <asp:ListItem>Open</asp:ListItem>
                    <asp:ListItem>Closed</asp:ListItem>
                </asp:DropDownList>
protected void tabs()
{
....
sds.FilterParameters.Clear();
        sds.SelectParameters.Clear();
        ControlParameter cp = new ControlParameter();
            cp.ControlID = ddl_temp.ID.ToString();
            cp.PropertyName = "SelectedValue";
            cp.Name = "Status";
            cp.Type = TypeCode.String;
            cp.ConvertEmptyStringToNull = false;
            sds.FilterParameters.Add(cp);           
            sds.ID = "sds1";
            sds.SelectParameters.Add("sid", sid);
            IssuesPanel.Controls.Add(sds);

        BoundField date = new BoundField();
            date.HeaderText = "Date";
            date.DataField = dt.Columns[2].ToString();
            date.SortExpression = dt.Columns[2].ToString();

        BoundColumn bc = new BoundColumn();
        bc.DataField = dt.Columns[2].ToString();

        BoundField status = new BoundField();
            status.HeaderText = "Status";
            status.DataField = dt.Columns[3].ToString();

         gv4 = new GridView();
            gv4.DataSource = sds;
            gv4.RowDataBound += gv4_RowCommand;
            gv4.Columns.Add(date);
            gv4.Columns.Add(status);
            gv4.CellPadding = 6;
            gv4.AutoGenerateColumns = false;
            //gv4.AllowSorting = true;
            gv4.AllowPaging = true;
            gv4.DataBind();             
        IssuesPanel.Controls.Add(gv4);
...
}



protected void gv4_RowCommand(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton lb = new LinkButton();
            lb.Text = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Title"));
            lb.ID = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Issue_ID"));
            lb.Click += new EventHandler(issueModal);
            e.Row.Cells[0].Controls.Add(lb);

        }

    }

protected void ddl_temp_SelectedIndexChanged(object sender, EventArgs e)
    {


            sds.FilterParameters.Clear();
            ControlParameter cp = new ControlParameter();
            cp.ControlID = ddl_temp.ID.ToString();
            cp.PropertyName = "SelectedValue";
            cp.Name = "Status";
            cp.Type = TypeCode.String;
            cp.ConvertEmptyStringToNull = false;
            sds.FilterParameters.Add(cp);
            sds.FilterExpression = "Status='{0}'";
                gv4.DataSource = sds;
                gv4.DataBind();

    }

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Я решил эту проблему, сохранив FilterExpression в переменной сеанса и назначив его на page_load, так как каждый раз, когда я нажимал кнопку LinkButton, она перезагружала страницу.

Спасибо за вашу помощь.

1 голос
/ 11 августа 2011

На каком этапе жизненного цикла страницы это происходит?Трудно сказать, что происходит с этим небольшим фрагментом.Нужно немного больше контекста.

Вы пробовали обернуть свою выпадающую фильтрацию этим:

if (!Page.IsPostBack)
{
    //dropdown filtering here
}
...