在做的項目中有評論功能,要求是如果是社區主任的回覆,就自動置頂,代表是官方的回覆,原來的數據庫中沒的這個置頂字段,所以就想到 了在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方法是把原來表中的定義好的列名這些複製到 新的表中 ,也就是複製表結構到 新表。