0

単純なものが欠けているようです。
PageIndex を変更すると、チェックボックスのステータスが保持されません。

.aspx ページ

    <asp:Panel ID="ReassignPanel" runat="server" Width="100%" >
    </asp:Panel>

コードビハインド

using System.Data;
using System.Configuration;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class TasksReassign2_aspx : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            gvTasksList.Visible = true;
            DropDownList ddlAssignedTo = (DropDownList)ReassignDetailsView.FindControl("ddlUserAssignedToSelection");
            ddlAssignedTo.DataSource = DropDownSource_AssignedTo;
            ddlAssignedTo.DataBind();
            for (int i = 0; i < ddlAssignedTo.Items.Count; i++)
            {
                ddlAssignedTo.Items[i].Text = ddlAssignedTo.Items[i].Text.Replace(" (inactive)", "");
            }
            DropDownList ddlReassign = (DropDownList)ReassignDetailsView.FindControl("ddlUserReassignSelection");
            ddlReassign.DataSource = DropDownSource_ReassignTo;
            ddlReassign.DataBind();
            ddlReassign.SelectedIndex = ddlReassign.Items.IndexOf(ddlReassign.Items.FindByValue(usr.UserID.ToString()));
        }
    }

    private void CheckboxSave()
    {
        ArrayList array_Tasks = new ArrayList();
        for (int index = 0; index < gvTasksList.Rows.Count; index++)
        {
            bool result = ((CheckBox)gvTasksList.Rows[index].FindControl("cbReassign")).Checked;
            if (ViewState["SelectedRecords"] != null)
            {
                array_Tasks = (ArrayList)ViewState["SelectedRecords"];
            }
            if (result)
            {
                if (!array_Tasks.Contains(gvTasksList.Rows[index].Cells[1].Text))
                {
                    array_Tasks.Add(gvTasksList.Rows[index].Cells[1].Text);
                }
            }
            else
            {
                array_Tasks.Remove(gvTasksList.Rows[index].Cells[1].Text);
            }
        }
        if (array_Tasks != null && array_Tasks.Count > 0) ViewState["SelectedRecords"] = array_Tasks;
    }

    private void CheckboxPopulate()
    {
        ArrayList array_Tasks = (ArrayList)ViewState["SelectedRecords"];
        if (array_Tasks != null && array_Tasks.Count > 0)
        {
            for (int index = 0; index < gvTasksList.Rows.Count; index++)
            {
                if (array_Tasks.Contains(gvTasksList.Rows[index].Cells[1].Text))
                {
                    CheckBox chkbx = (CheckBox)gvTasksList.Rows[index].FindControl("cbReassign");
                    chkbx.Checked = true;
                }
            }
        }
    }

    protected void paging_gvTasks(object sender, GridViewPageEventArgs e)
    {
        CheckboxSave();
        gvTasksList.PageIndex = e.NewPageIndex;
        gvTasksList.DataBind();
        CheckboxPopulate();
    }    
    /****************************************************************************/
    protected void evaluateCheckChange(object sender, EventArgs e)
    {
        if (rblOption.Text == "T") //Taks
        {
            gvTasksList.PageSize = Convert.ToInt32(((RadioButton)sender).Text);
        }
    }

    protected void Changed_AssignedTo_or_rblOption(object sender, EventArgs e)
    {
        DropDownList ddlAssignedTo = (DropDownList)ReassignDetailsView.FindControl("ddlUserAssignedToSelection");
        ddlAssignedTo.DataSource = DropDownSource_AssignedTo;
        UserTasksGridSource.SelectParameters.Clear();
        gvTasksList.Visible = false;
        if (rblOption.Text == "T")
        {
            gvTasksList.Visible = true;
            LabelHeaderTasks.Text = "Task(s)";
            UserTasksGridSource.SelectParameters.Clear();
            UserTasksGridSource.SelectParameters.Add("Users_PKID_assigned", TypeCode.Int32, ddlAssignedTo.SelectedValue);
            UserTasksGridSource.SelectMethod = "Tasks_GetListByUsers_PKID_assigned_to";
           UserTasksGridSource.DataBind();
        }
    }
}
4

1 に答える 1

0

GridView のページ インデックスを切り替えると、ポストバックが発生します。ポストバック間でチェックボックスの値を保存して読み込む場合を除き、UpdatePanel (AJAX) と適切な AsyncPostbackTrigger を使用する必要があります。

http://msdn.microsoft.com/en-us/library/vstudio/bb386454(v=vs.100).aspx http://www.asp.net/AJAX/documentation/live/overview/UpdatePanelOverview.aspx http ://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp-net-ajax-updatepanel-triggers

アップデート:

申し訳ありませんが、サンプルコードを読むべきでした。チェックボックスの値を保存していることに気づきませんでした。

ただし、 のコードを見ると、paging_gvTasksうまくいかないと思います。ページは、ページング イベントに到達する前に再読み込みされます。ページ読み込みイベントとページング イベントにブレークポイントを設定します。次に、GridView のページを変更して、何が起こるかを確認します。

ページのライフ サイクル: http://msdn.microsoft.com/en-us/library/ms178472(v=vs.85).aspx

于 2014-06-06T16:16:30.853 に答える