Bonjour,
Effectivement, les évènements que tu interceptes nécessitent de remplir ton grid de nouveau. C'est le cas pour les filtres, les tris et la pagination. L'idéal dans ton cas est de travailler avec les viewstates. C'est là que sont persitées les valeurs de tes objets.
En utilisant :
using System.Collections;
tu vas utiliser dans le pageload une arraylist pour stocker l'état des cases à cocher:
1 2 3 4 5 6 7 8 9 10
| ArrayList CheckBoxArray;
if (ViewState["CheckBoxArray"] != null)
{
CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];
}
else
{
CheckBoxArray = new ArrayList();
} |
Si tu gères la pagination et une cellule d'entête pour cocher ou décocher toutes les cases à cocher, tu vas devoir faire quelque chose qui ressemble à ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| int CheckBoxIndex;
bool CheckAllWasChecked=false;
CheckBox chkAll =
(CheckBox)GridView1.HeaderRow.Cells[0].FindControl("chkAll");
string checkAllIndex = "chkAll-" + GridView1.PageIndex;
if (chkAll.Checked)
{
if (CheckBoxArray.IndexOf(checkAllIndex) == -1)
{
CheckBoxArray.Add(checkAllIndex);
}
}
else
{
if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
{
CheckBoxArray.Remove(checkAllIndex);
CheckAllWasChecked = true;
}
} |
Enfin, tu vas itérer sur tes lignes pour vérifier l'état des cases à cocher :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| for (int i = 0; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)
{
CheckBox chk =
(CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");
CheckBoxIndex = GridView1.PageSize * GridView1.PageIndex + (i + 1);
if (chk.Checked)
{
if (CheckBoxArray.IndexOf(CheckBoxIndex) == -1
&& !CheckAllWasChecked)
{
CheckBoxArray.Add(CheckBoxIndex);
}
}
else
{
if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1
|| CheckAllWasChecked)
{
CheckBoxArray.Remove(CheckBoxIndex);
}
}
}
} |
Tu gères maintenant l'état de tes cases à cocher dans une arraylist persistée sur ta page. Il te reste à utiliser cette liste lors de l'évènement que tu gères (sorting, paging...)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
ArrayList CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];
string checkAllIndex = "chkAll-" + GridView1.PageIndex;
if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
{
CheckBox chkAll =
(CheckBox)GridView1.HeaderRow.Cells[0].FindControl("chkAll");
chkAll.Checked = true;
}
for (int i = 0; i < GridView1.Rows.Count; i++)
{
if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)
{
if (CheckBoxArray.IndexOf(checkAllIndex) != -1)
{
CheckBox chk =
(CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");
chk.Checked = true;
}
else
{
int CheckBoxIndex =GridView1.PageSize*(GridView1.PageIndex)+(i + 1);
if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1)
{
CheckBox chk =
(CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");
chk.Checked = true;
}
}
}
} |
En espérant que cela te seras utile. Je t'invite à jeter un oeil aux notion de viewstate si tu n'es pas familier avec
Partager