Gridview внутри UpdatePanel Удаление записей, обновление неправильных строк - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть несколько видов сетки внутри каждой собственной панели обновления. У меня есть кнопки, которые фильтруют данные, но иногда замечают необычные обновления и удаления, которые я не могу определить источник. Одна вещь, которую я выделил, заключается в том, что это происходит, когда я сортирую данные сетки в одной UpdatePanel, а затем пытаюсь обновить другую UpdatePanel.

(все мои представления сетки получают свои данные из одной и той же процедуры DataLoad, которая заполняет каждое представление сетки на основе разных запросов Linq.)

Я разрешил большинство необычных обновлений, вызвав .Update () на всех UpdatePanels после моей функции сортировки, чтобы все "сеточные представления" обновлялись. Но затем все еще есть некоторые случаи, когда данные обновляются, и я не могу изолировать источник.

Похоже, что данные вне одной UpdatePanel на самом деле обновляются "за сценой", и на экране отображаются только кэшированные данные, а затем, когда я редактирую то, что на экране, обновляются неправильные данные, потому что они не были обновлены.

Я предполагаю, что моя стратегия сортировки неверна, так как я сортирую все виды сетки вместо только этого конкретного вида сетки, когда пользователь щелкает заголовок столбца.

Вот моя процедура сортировки, которая вызывается каждым видом сетки:

protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
{               
    string sortExp = ViewState["SortExpression"] as string;     
    string sortDir = ViewState["SortDirection"] as string;
    if(sortDir == "asc" & sortExp == e.SortExpression.ToString())
        ViewState["SortDirection"] = "desc";
    else
        ViewState["SortDirection"] = "asc";
    ViewState["SortExpression"] = e.SortExpression.ToString();

    if(searchCol != "" && searchText != "")
        DataGrid_Load(DAL.Search_reg_log(OrgText.Text, searchText, searchCol), "reg");
    else
        DataGrid_Load(DAL.reg_log(HeadText.Text, OrgText.Text), "reg");     

    UpdatePanels();

}

Я новичок в использовании Ajax и UpdatePanels и хотел бы получить какие-либо указания по разрешению этой ситуации.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Нет ничего плохого в том, что вы разместили в своем коде. Проблема не в этом фрагменте и не имеет ничего общего с ViewState или UpdatePanel. Если вы не уверены, что происходит, это помогает визуализировать это. Либо путем отладки, либо просто отобразите результат в метке и посмотрите, соответствует ли он ожидаемому.

protected void TaskGridView_Sorting(object sender, GridViewSortEventArgs e)
{
    //load the previous sorting settings
    string sortExp = ViewState["SortExpression"] as string;
    string sortDir = ViewState["SortDirection"] as string;

    //reverse the direction if the column is the same as the previous sort
    if (sortDir == "asc" & sortExp == e.SortExpression.ToString())
        ViewState["SortDirection"] = "desc";
    else
        ViewState["SortDirection"] = "asc";

    //put the current sort column in the viewstate
    ViewState["SortExpression"] = e.SortExpression.ToString();

    //show sorting result in a literal for testing
    Literal1.Text = ViewState["SortExpression"] + " " + ViewState["SortDirection"];

    //rebind data
    if (searchCol != "" && searchText != "")
        DataGrid_Load(DAL.Search_reg_log(OrgText.Text, searchText, searchCol), "reg");
    else
        DataGrid_Load(DAL.reg_log(HeadText.Text, OrgText.Text), "reg");

    //update the updatepanels
    UpdatePanels();
}
0 голосов
/ 27 ноября 2018

Использование свойств для ViewState может быть вызвано Post Process вашего PostBack

private string p_SortExp
    {
        get
        {
            if (ViewState["p_SortExp"] != null)
            {
                return ViewState["dtSupplierList"] as string;
            }
            else
            {
                return null;
            }
        }
        set
        {
            ViewState["p_SortExp"] = value;
        }
    }

затем в своей функции попробуйте вызвать свойства и не забудьте установить их в нужных функциях для лучшего удобства использования

...