在做的項目中有評論功能,要求是如果是社群主任的回複,就自動置頂,代表是官方的回複,原來的資料庫中沒的這個置頂字段,是以就想到 了在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方法是把原來表中的定義好的列名這些複制到 新的表中 ,也就是複制表結構到 新表。
歡迎加入.net技術交流群
DataTable中的Clone以及Select用法歡迎加入.net技術交流群
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuAXdvJ3Zvw1cldWYtl2LcFGc39CXt92YucWbpFXcklmLiVHcvw1LcpDc0RHaiojIsJye.png)