Флажок Gridview теряет информацию при сортировке - PullRequest
2 голосов
/ 11 июля 2011

Так что у меня есть этот флажок внутри gridview, и он по большей части работает правильно. Тем не менее, я пытаюсь реализовать сортировку столбцов в сетке, и это вызывает проблему с флажком. Когда я делаю начальную выборку из базы данных, она правильно заполняет флажки, но когда я щелкаю столбец для сортировки по нему, все мои флажки сбрасываются.

Похоже, что это проблема с привязкой данных, выполняемой сеткой, но я не уверен, что делаю неправильно. Из-за моего исследования этой проблемы я чувствую, что у меня все правильно, но я точно не знаю (устаревший код: я ненавижу это).

<asp:GridView ID="UserListGrid" runat="server"
    OnSorting="UserListGrid_Sort" AllowSorting = "True" AutoGenerateColumns="False"  
    AllowPaging="True" PageSize="25" OnRowDataBound="UserListGrid_RowDataBound" 
    OnPageIndexChanging="UserListGrid_PageIndexChanging">

. , .

    <ItemTemplate>
       <asp:CheckBox ID="ActiveCheck" runat="server" SortExpression="ActiveCheck"/>                                                   
    </ItemTemplate>

. , .

protected void UserListGrid_Sort(object sender, GridViewSortEventArgs e)
{
        // ViewState["CurTab"] = 0;
        DataTable Data = myData.GetSessionRoster(TeamID);
        DataView UserListView = new DataView(Data);
        ViewState["SortDirection"] = myData.ConvertSortDirectionToSql(ViewState["SortDirection"] == null ? "" : ViewState["SortDirection"].ToString());
        UserListView.Sort = e.SortExpression + " " + ViewState["SortDirection"];
        UserListGrid.DataSource = UserListView;
        UserListGrid.DataBind();
}

Что-то явно не так с моей сортировкой? Я могу предоставить больше кода, если это необходимо.

По запросу, вот UserListGrid_RowDataBound

protected void UserListGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType != DataControlRowType.DataRow)
    {
        return;
    }
    // See which users are active
    CheckBox ActiveCheck = (CheckBox)e.Row.Cells[1].FindControl("ActiveCheck");
    if (ActiveCheck != null)
    {
        ActiveCheck.Enabled = true;
        if (e.Row.Cells[11].Text.Equals("1") && !Page.IsPostBack)
        {
            ActiveCheck.Checked = true;
            ActiveCheck.DataBind();
        }
    }
}

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Похоже, вы устанавливаете флажки не из базы данных, а в соответствии с содержимым вашей ячейки 11 (что бы это ни было). Я обращаюсь к этой строке кода:

if (e.Row.Cells[11].Text.Equals("1") && !Page.IsPostBack)

При сортировке вы перепривязываете свое сеточное представление, но вы ограничиваете заполнение и повторное связывание своих флажков при обратной передаче. Это может быть причиной того, что флажки теряют значения.

0 голосов
/ 12 июля 2011

Я не вижу, где вы сохраняете данные своих чеков.Однако хорошим подходом является сохранение всех изменений, внесенных конечным пользователем при каждом запросе к серверу.Насколько я вижу, данные хранятся в DataTable.Поэтому, как правило, вы должны просмотреть все строки сетки, найти в них флажки и сохранить их значения в этой таблице.Это должно быть сделано в методе Page_Load.Это необходимо для правильной работы кода в обработчике событий UserListGrid_RowDataBound.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...