หากต้องการเรียงลำดับต่อหลังจากพลิกหน้า ให้บรรลุผลนี้:
ตัวอย่างเช่น มีทั้งหมด 15 เรคคอร์ด และ 10 เรคคอร์ดจะแสดงในแต่ละหน้า
เมื่อเรียงลำดับ: 10 เรคคอร์ดแรกจะถูกจัดเรียงในหน้าแรก และ 5 เรคคอร์ดถัดไป จะถูกจัดเรียงแยกกันเมื่อเปิดหน้าที่สอง
ให้ความสนใจกับประเด็นต่อไปนี้:
1. หากมีข้อมูลจำนวนมาก ไม่ควรใส่ชุดข้อมูลไว้ในแคช (viewstate) ซึ่งจะส่งผลต่อประสิทธิภาพ
2. ViewState จะจัดเก็บ e.expression สุดท้ายและดูว่า e.expression เรียงลำดับจากน้อยไปมากหรือจากมากไปหาน้อย
ตัวอย่างมีดังต่อไปนี้:
1.
เหตุการณ์การเรียงลำดับที่มีอยู่จะถูกเขียนดังนี้
grdProjTrace_SortCommand (แหล่งที่มาของวัตถุ DataGridSortCommandEventArgs e)
-
this.grdProjTrace.CurrentPageIndex = 0;
DataView dv = รับรหัสข้อมูล;
สตริง strSort = "";
string strOrder = ""; // วิธีการเรียงลำดับ 0, ลำดับจากมากไปน้อย, 1 ลำดับจากน้อยไปหามาก if(ViewState["SortExpresstion"] != null)
-
strSort = ViewState["SortExpresstion"].ToString();
strSort = strSort.Substring(0,strSort.Length -1);
strOrder = ViewState["SortExpresstion"].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
-
ถ้า(e.SortExpression == "ชื่อลูกค้า")
-
if(strSort != "ชื่อลูกค้า")
-
this.ViewState["SortExpresstion"] = ustomerName0";
dv.Sort = "ชื่อลูกค้า DESC";
-
อื่น
-
ถ้า(strOrder == "0")
-
this.ViewState["SortExpresstion"] = "ชื่อลูกค้า1";
dv.Sort = "ชื่อลูกค้า ASC";
-
อื่น
-
this.ViewState["SortExpresstion"] = "ชื่อลูกค้า0";
dv.Sort = "ชื่อลูกค้า DESC";
-
-
-
ถ้า(e.SortExpression == "ชื่อเต็ม")
-
ถ้า(strSort != "ชื่อเต็ม")
-
this.ViewState["SortExpresstion"] = "ชื่อเต็ม0";
dv.Sort = "ชื่อเต็ม DESC";
-
อื่น
-
ถ้า(strOrder == "0")
-
this.ViewState["SortExpresstion"] = "ชื่อเต็ม1";
dv.Sort = "ชื่อเต็ม ASC";
-
อื่น
-
this.ViewState["SortExpresstion"] = "ชื่อเต็ม0";
dv.Sort = "ชื่อเต็ม DESC";
-
-
-
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
2. วิธีการต่อไปนี้เขียนขึ้นเองและเรียกว่าในกิจกรรมเปลี่ยนหน้า
โมฆะส่วนตัว ChangePageDataBind()
-
DataView dv = รับรหัสข้อมูล;
สตริง strSort = "";
string strOrder = ""; // วิธีการเรียงลำดับ 0, ลำดับจากมากไปน้อย, 1 ลำดับจากน้อยไปหามาก if(ViewState["SortExpresstion"] != null)
-
strSort = ViewState["SortExpresstion"].ToString();
strSort = strSort.Substring(0,strSort.Length -1);
strOrder = ViewState["SortExpresstion"].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
-
ถ้า (this.ViewState ["SortExpresstion"] != null)
-
ถ้า(strSort == "ชื่อลูกค้า")
-
ถ้า(strOrder == "1")
-
this.ViewState["SortExpresstion"] = "ชื่อลูกค้า1";
dv.Sort = "ชื่อลูกค้า ASC";
-
อื่น
-
this.ViewState["SortExpresstion"] = "ชื่อลูกค้า0";
dv.Sort = "ชื่อลูกค้า DESC";
-
-
-
ถ้า (this.ViewState ["SortExpresstion"] != null)
-
ถ้า(strSort == "ชื่อเต็ม")
-
ถ้า(strOrder == "1")
-
this.ViewState["SortExpresstion"] = "ชื่อเต็ม1";
dv.Sort = "ชื่อเต็ม ASC";
-
อื่น
-
this.ViewState["SortExpresstion"] = "ชื่อเต็ม0";
dv.Sort = "ชื่อเต็ม DESC";
-
-
-
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
สามารถเรียกสองวิธีข้างต้นได้โดยตรงตราบใดที่ชื่อของฟิลด์ที่จะเรียงลำดับได้รับการแก้ไข
1. วิธีการนี้ง่ายและใช้งานได้จริง ดังนั้นฉันจะไม่พูดถึงมันที่นี่
2. วิธีการถูกใช้เช่นนี้:
โมฆะส่วนตัว grdProjTrace_PageIndexChanged (แหล่งวัตถุ, DataGridPageChangedEventArgs e)
-
พยายาม
-
พยายาม
-
this.grdProjTrace.CurrentPageIndex = e.NewPageIndex;
-
จับ
-
this.grdProjTrace.CurrentPageIndex = 0;
}
นี้ ChangePageDataBind();
-
จับ (System.Exception errWS)
-
//ผิดปกติ}
-