이 기술은 페이징에서 GridView CheckBox의 상태를 유지 관리한다고합니다. 이를 달성하기위한 한 가지 방법은 다음과 같습니다.
- 확인 된 행과 관련된 DataKeys를 저장할 int 또는 string의 Genric List를 만듭니다.
- PageIndex를 새 색인으로 설정하기 전에 PageIndexChanging에서 지정하십시오. GridView의 각 행에 대해
- 확인란을 선택하면 id가 일반 목록에 저장됩니다.
- 체크 박스가 선택 해제되어있는 경우 & ID가 일반 목록에 존재하면 목록에서 해당 ID를 제거하십시오.
- RowDataBound 이벤트에서 각 DataRow에 대해 DataKeyName이 일반 목록에 있는지 확인하십시오. 그렇다면 CheckBox를 찾아 선택합니다.
제품 표와 간단한 예는 Northwind 데이터베이스는
private List<int> ProductIDs
{
get
{
if (this.ViewState["ProductIDs"] == null)
{
this.ViewState["ProductIDs"] = new List<int>();
}
return this.ViewState["ProductIDs"] as List<int>;
}
}
protected void gvProducts_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
foreach (GridViewRow gvr in gvProducts.Rows)
{
CheckBox chkSelect = gvr.FindControl("chkSelect") as CheckBox;
if (chkSelect != null)
{
int productID = Convert.ToInt32(gvProducts.DataKeys[gvr.RowIndex]["ProductID"]);
if (chkSelect.Checked && !this.ProductIDs.Contains(productID))
{
this.ProductIDs.Add(productID);
}
else if (!chkSelect.Checked && this.ProductIDs.Contains(productID))
{
this.ProductIDs.Remove(productID);
}
}
}
}
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow gvr = e.Row;
if (gvr.RowType == DataControlRowType.DataRow)
{
CheckBox chkSelect = gvr.FindControl("chkSelect") as CheckBox;
if (chkSelect != null)
{
int productID = Convert.ToInt32(gvProducts.DataKeys[gvr.RowIndex]["ProductID"]);
chkSelect.Checked = this.ProductIDs.Contains(productID);
}
}
}
을 수행하는 방법에 ... 어떤 샘플 코드 뒤에 코드
아래의 마크 업
주어집니다 ,,, –
해당 데이터 키가 템플릿에있을 수 있습니까? feild –
gridview.DataKeynames = "ProductID"의 마크 업을 확인하십시오. 당신은 ofcourse를 itemtemplate의 hiddenfield로 저장할 수 있습니다. 그러나 우리가 소스를 보았을 때 이드를 노출시키고 좋은 습관은 아닙니다. – naveen