在做的项目中有评论功能,要求是如果是社区主任的回复,就自动置顶,代表是官方的回复,原来的数据库中没的这个置顶字段,所以就想到 了在New出来的DataTable中来实现这个功能。
/// <summary> /// 加载评论信息 /// </summary> private void LoadData() { string strSql = ViewState["strSql"].ToString(); //Response.Write(strSql); DataTable myDt = myDbAccess.GetTable(strSql); DataTable DT = new DataTable(); DT.Columns.Add("NickName"); DT.Columns.Add("HeadPhoto"); DT.Columns.Add("UserNo"); DT.Columns.Add("CommentDate"); DT.Columns.Add("CommentContent"); DT.Columns.Add("IfTop",typeof(Int16));//如果是社区主任回复的,就自动置顶=1,代表官方回复 for (int i = 0; i < myDt.Rows.Count; i++) { string strHeadPhoto, strSex; DataRow dr = DT.NewRow(); dr["CommentDate"] = myDt.Rows[i]["cDatetime"].ToString(); dr["CommentContent"] = myDt.Rows[i]["cContent"].ToString(); dr["NickName"] = myDt.Rows[i]["NickName"].ToString(); //dr["UserNo"] = myDt.Rows[i]["UserNO"].ToString(); //加密用户名 2014年2月19日12:30:26 小马 dr["UserNo"] =CryptoHelper.Encrypt(myDt.Rows[i]["UserNO"].ToString(),"ABCDEFGHIJKLMNOP"); strHeadPhoto = myDt.Rows[i]["HeadPhoto"].ToString(); strSex = myDt.Rows[i]["Sex"].ToString(); if (myDbAccess.FileExists(strHeadPhoto)) { dr["HeadPhoto"] = strHeadPhoto; } else { dr["HeadPhoto"] = MyCheck.FormatUserPic(strHeadPhoto, strSex); } if (myDbAccess.CheckSNSHead(myDt.Rows[i]["UserNO"].ToString())) { dr["IfTop"] = 1; } else { dr["IfTop"] = 0; } DT.Rows.Add(dr); } //2014年3月24日10:43:04 小马 如果是社区主任回复的就置顶,代表官方回复 DataRow[] sortrows= DT.Select("1=1","IfTop DESC");//根据置顶来排序(第一个参数是where ,第二个参数是排序字段以及排序规则) DataTable SortDT = new DataTable();//创建新表 SortDT = DT.Clone();//把上面的DT表结构复制到 新表中 foreach (DataRow row in sortrows) {//为新表填充数据 SortDT.Rows.Add(row.ItemArray); }
DataTable的Select()方法类似于我们用sql语句,这里用两个参数的方法是表示:第一个参数是需要传入的where条件,但是where不用写,第二个参数代表你需要排序的字段,直接写上排序字段名称和排序规则就可以了,不需要写order by.
Clone方法是把原来表中的定义好的列名这些复制到 新的表中 ,也就是复制表结构到 新表。
DataTable中的Clone以及Select用法,布布扣,bubuko.com
原文:http://blog.csdn.net/itmaxin/article/details/21938295