DataTable 排序
DataRow[] rows = dataTable1.Select("", "ord asc");
DataTable t = DataTable1.Clone();
t.Clear();
foreach (DataRow row in rows)
t.ImportRow(row);
DataTable1 = t;
VS2005中這種方法最簡單:
DataView dv = dt.DefaultView;
dv.Sort = "c1 Asc";
DataTable dt2 = dv.ToTable();
--------------------------
//拿到數據源
DataView dv = this.dtDataSource.Copy().DefaultView;
//排序
dv.Sort = "款 asc,項 asc,目 asc";
//過濾重復數據
//DataTable dt = dv.ToTable(true, "款", "項", "目");
//不過濾重復數據
DataTable dt = dv.Table.Copy();
-----------------------------------------------
關於DataView(DataTable)排序的思考
因項目需要,在獲得dataset(或者DataTable)之后要對該table進行重新排序,排序規則按照數組fids元素的順序進行。
在測試的時候,我用簡單的思考方法,在table上增加一列dis,來存放該行的主鍵在fids中的對應項的索引,一個循環之后,dis都被賦了值,現在就要排序了,因為datatable沒有排序功能,就選擇了轉換DataTable為DataView,然后對DataView進行排序,關鍵代碼如下:
DataView dw = dt.DefaultView;
dw.Sort = "dis,發布日期 desc";
然后把dw綁定到DataGird輸出,結果正好符合原意。
可是具體使用中卻出了問題,因為我對dw又進行了一次處理,取該分頁需要的某幾項綁定到DataGird,於是結果和排序之前一樣,沒有了變化。
究其原因,才發現,這里的DataView只是設定了排序規則,並沒有實施排序,那么排序在什么時候發生呢,應該是在綁定到DataGird的時候才發生,所以我后來的方法就出了問題。
總結如下:DataView的篩選和排序功能都是在綁定到數據控件的時候才執行的,如果你是簡單的需求(也就是說不需要再取其中的部分數據來綁定數據控件),那就可以使用該功能。
我的問題的最終解決方法如下(只使用了簡單的循環):
private DataTable SortTable(DataTable dt,string[] pids)
{
DataTable dt0 = dt.Clone(); //復制原表結構
for(int i=0;i<pids.Length;i++)
{
if(pids[i] != string.Empty)
{
DataRow[] drs = dt.Select("pos_id=" + pids[i]);
if(drs.Length > 0)
{
foreach(DataRow dr in drs)
{
dt0.ImportRow(dr); //導入行
}
}
}
}
return dt0;
}
說明:就是對排序的數組循環,在datatable中找對應的行,然后復制到新表中。
該方法的效率還是可以的,不過如果交集次數大於20,000,000的時候,就會有效率問題。
****************************************************************
dstaset.Tables.Add(dt)
dataset.Tables(0).DefaultView.Sort = "id desc"
dv = New DataView(dt)
dv.Sort = "id desc"
dv = New DataView(ds.Tables[0])
dv.Sort = "id desc"-------------------------------------------------------------- System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("aa", typeof(string));
System.Data.DataRow row = table.NewRow();
row["aa"] = "sdf";
table.Rows.Add(row);
System.Data.DataView dv = new System.Data.DataView(table);
table.Columns.Add("bb", typeof(string)); DataTable dt = con.getDGResulthk(sql);
DataColumn col1 = con.getCol(sql1);
DataColumn col = dt.Columns.Add("工資");
DataRow dr = dt.NewRow();
dr["工資"] = col1;
dt.Rows.Add(dr);
dataGridView1.DataSource = dt;
dataGridView1.AutoResizeColumns();
System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("aa", typeof(string));
System.Data.DataRow row = table.NewRow();
row["aa"] = "sdf";
table.Rows.Add(row);
System.Data.DataView dv = new System.Data.DataView(table);
DataTable drReport=new DataTable();
DataRow[] pdrs111 = dtReport.Select("code=''" + strNoCode + "''");
if (pdrs111.Length > 0)
{
foreach (DataRow dr111 in pdrs111)
{
decfd_1 = Convert.ToDouble(dr111["fd"].ToString());
dr111["fd_no"] = dtNOValue;
dr111["fd_no_toal"] = decfd_1 + dtNOValue;
}
}
dstaset.Tables.Add(dt)
dataset.Tables(0).DefaultView.Sort = "id desc"
dv = New DataView(ds.Tables[0])
dv.Sort = "id desc"