在做的项目中有评论功能,要求是如果是社区主任的回复,就自动置顶,代表是官方的回复,原来的数据库中没的这个置顶字段,所以就想到 了在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方法是把原来表中的定义好的列名这些复制到 新的表中 ,也就是复制表结构到 新表。