对栏目的排序
最近系统发现栏目排序的bug,研究一下发现开发者考虑过少,给1个排序ID,就要实现添加,删除,排序移动.
在理想情况,排序id连续且不重复,工作正常.但排序ID不连续和重复将导致排序功能错误.
由于时间紧,我在绑定grid之前,将datatable中的排序id的值与循环索引i进行比较,如果不相等则进行update排序id=i;
然后重新select,此时可保证后面操作正常.
当然这样做难免性能低下,如果时间允许,我想页面的排序移动可以用脚本实现(prortotype.js辅助),而调整完毕,点保存,才进行更新,这应该才是比较好的做法吧
在理想情况,排序id连续且不重复,工作正常.但排序ID不连续和重复将导致排序功能错误.
由于时间紧,我在绑定grid之前,将datatable中的排序id的值与循环索引i进行比较,如果不相等则进行update排序id=i;
然后重新select,此时可保证后面操作正常.
1 DataTable dt= new DataTable();
2 string sql = "select * from GS_Page ORDER BY RankId ";
3 dt = DataAccess.ExecuteDataset(ConnStrManage.GetConnStr,CommandType.Text,sql).Tables[0];
4 string sqlup ="";
5 for (int i=0;i<dt.Rows.Count;i++)
6 {
7 if (dt.Rows[i]["RankId"].ToString()!=i.ToString())
8 {
9 sqlup += "update GS_Page set RankId = "+i+" where ID ="+dt.Rows[i]["ID"]+";";
10 }
11 }
12 if (sqlup!="")
13 {
14 DataAccess.ExecuteNonQuery(ConnStrManage.GetConnStr ,CommandType.Text,sqlup);
15 dt = null;
16 dt = DataAccess.ExecuteDataset(ConnStrManage.GetConnStr,CommandType.Text,sql).Tables[0];
17 }
2 string sql = "select * from GS_Page ORDER BY RankId ";
3 dt = DataAccess.ExecuteDataset(ConnStrManage.GetConnStr,CommandType.Text,sql).Tables[0];
4 string sqlup ="";
5 for (int i=0;i<dt.Rows.Count;i++)
6 {
7 if (dt.Rows[i]["RankId"].ToString()!=i.ToString())
8 {
9 sqlup += "update GS_Page set RankId = "+i+" where ID ="+dt.Rows[i]["ID"]+";";
10 }
11 }
12 if (sqlup!="")
13 {
14 DataAccess.ExecuteNonQuery(ConnStrManage.GetConnStr ,CommandType.Text,sqlup);
15 dt = null;
16 dt = DataAccess.ExecuteDataset(ConnStrManage.GetConnStr,CommandType.Text,sql).Tables[0];
17 }
当然这样做难免性能低下,如果时间允许,我想页面的排序移动可以用脚本实现(prortotype.js辅助),而调整完毕,点保存,才进行更新,这应该才是比较好的做法吧