DataTable 中的查询、排序及分页(c#)

 

public class GetDataTable

{

/// <summary>

/// 对sourceDt进行排序,并且可以自由设置显示的条数

/// --select top (num) from sourceDt order by strSort

/// </summary>

/// <param name="sourceDt">原DataTable</param>

/// <param name="strSort">排序的字段,不用加order by (如: name desc 或 name desc,datecreated desc)</param>

/// <param name="topNum">显示的数量(为0 是显示全部)</param>

/// <returns>new DataTable</returns>

public static DataTable SortTop(DataTable sourceDt, string strSort, int topNum)

{

DataTable dt = sourceDt.Clone();



int totalCount = sourceDt.Rows.Count;

if (totalCount > 0)

{

DataView dv = sourceDt.DefaultView;

dv.Sort = strSort;



//计算要显示的条数

int count = topNum > 0 ? (topNum > totalCount ? totalCount : topNum) : totalCount;

for (int i = 0; i < count; i++)

{

dt.ImportRow(dv[i].Row);

}

}

return dt;

}



/// <summary>

/// 对sourceDt进行查询和排序,并且可以自由设置显示的条数

/// --select top (count) from sourceDt where strSelect order by strSort

/// </summary>

/// <param name="sourceDt">原DataTable</param>

/// <param name="strSelect">查询条件(如:name='me')</param>

/// <param name="strSort">排序字段,不用加order by (如: name desc 或 name desc,datecreated desc)</param>

/// <param name="count">显示的数量(为0 是显示全部)</param>

/// <returns>new DataTable</returns>

public static DataTable SelectTop(DataTable sourceDt, string strSelect, string strSort, int count)

{

DataTable dt = sourceDt.Clone();

bool noSort = string.IsNullOrEmpty(strSort);

DataRow[] dr = noSort ? sourceDt.Select(strSelect) : sourceDt.Select(strSelect, strSort);

foreach (DataRow row in dr)

{

dt.Rows.Add(row.ItemArray);

}



int dtCount = dt.Rows.Count;

if (dtCount > 0)

{

//计算要显示的条数

int num = count > 0 ? (count > dtCount ? dtCount : count) : dtCount;

DataView dv = dt.DefaultView;



if (!noSort)

{

dv.Sort = strSort;

}



for (int i = 0; i < num; i++)

{

dt.ImportRow(dv[i].Row);

}

}

return dt;

}



/// <summary>

/// DateTable的分页操作

/// </summary>

/// <param name="dt">要进行分页的DataTable</param>

/// <param name="currentPageIndex">当前页数</param>

/// <param name="pageSize">一页显示的条数</param>

/// <returns>第pageIndex页的数据</returns>

public static DataTable SetPage(DataTable dt, int currentPageIndex, int pageSize)

{

if (currentPageIndex == 0)

{

return dt;

}



DataTable newdt = dt.Clone();



int rowbegin = (currentPageIndex - 1) * pageSize;//当前页的第一条数据在dt中的位置

int rowend = currentPageIndex * pageSize;//当前页的最后一条数据在dt中的位置



if (rowbegin >= dt.Rows.Count)

{

return newdt;

}



if (rowend > dt.Rows.Count)

{

rowend = dt.Rows.Count;

}



DataView dv = dt.DefaultView;

for (int i = rowbegin; i <= rowend - 1; i++)

{

newdt.ImportRow(dv[i].Row);

}



return newdt;

}

}

你可能感兴趣的:(Datatable)