smartsmile2012通过本文主要向大家介绍了asp.net DataTable相关操作集锦(筛选,取前N条数据,去重复行,获取指定列数据等)等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本文实例总结了asp.net DataTable相关操作。分享给大家供大家参考,具体如下:
#region DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回
/// <summary>
/// DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回
/// eg:SortExprDataTable(dt,"Sex='男'","Time Desc",1)
/// </summary>
/// <param name="dt">传入的DataTable</param>
/// <param name="strExpr">筛选条件</param>
/// <param name="strSort">排序条件</param>
/// <param name="mode">1,直接用DefaultView按条件返回,效率较高;2,DataTable筛选,排序返回符合条件行组成的新DataTable</param>
public static DataTable SortDataTable(DataTable dt, string strExpr, string strSort, int mode)
{
switch (mode)
{
case 1:
//方法一 直接用DefaultView按条件返回
dt.DefaultView.RowFilter = strExpr;
dt.DefaultView.Sort = strSort;
return dt;
case 2:
//方法二 DataTable筛选,排序返回符合条件行组成的新DataTable
DataTable dt1 = new DataTable();
DataRow[] GetRows = dt.Select(strExpr, strSort);
//复制DataTable dt结构不包含数据
dt1 = dt.Clone();
foreach (DataRow row in GetRows)
{
dt1.Rows.Add(row.ItemArray);
}
return dt1;
default:
return dt;
}
}
#endregion
</div>
#region 获取DataTable前几条数据
/// <summary>
/// 获取DataTable前几条数据
/// </summary>
/// <param name="TopItem">前N条数据</param>
/// <param name="oDT">源DataTable</param>
/// <returns></returns>
public static DataTable DtSelectTop(int TopItem, DataTable oDT)
{
if (oDT.Rows.Count < TopItem) return oDT;
DataTable NewTable = oDT.Clone();
DataRow[] rows = oDT.Select("1=1");
for (int i = 0; i < TopItem; i++)
{
NewTable.ImportRow((DataRow)rows[i]);
}
return NewTable;
}
#endregion
</div>
#region 获取DataTable中指定列的数据
/// <summary>
/// 获取DataTable中指定列的数据
/// </summary>
/// <param name="dt">数据源</param>
/// <param name="tableName">新的DataTable的名词</param>
/// <param name="strColumns">指定的列名集合</param>
/// <returns>返回新的DataTable</returns>
public static DataTable GetTableColumn(DataTable dt, string tableName, params string[] strColumns)
{
DataTable dtn = new DataTable();
if (dt == null)
{
throw new ArgumentNullException("参数dt不能为null");
}
try
{
dtn = dt.DefaultView.ToTable(tableName, true, strColumns);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
return dtn;
}
#endregion
</div>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Collections;
using System.Text;
namespace GuanEasy
{
/// <summary>
/// DataSet助手
/// </summary>
public class DataSetHelper
{
private class FieldInfo
{
public string RelationName;
public string FieldName;
public string FieldAlias;
public string Aggregate;
}
private DataSet ds;
private ArrayList m_FieldInfo;
private string m_FieldList;
private ArrayList GroupByFieldInfo;
private string GroupByFieldList;
public DataSet DataSet
{
get { return ds; }
}
#region Construction
public DataSetHelper()
{
ds = null;
}
public DataSetHelper(ref DataSet dataSet)
{
ds = dataSet;
}
#endregion
#region Private Methods
private bool ColumnEqual(object objectA, object objectB)
{
if ( objectA == DBNull.Value && objectB == DBNull.Value )
{
return true;
}
if ( objectA == DBNull.Value || objectB == DBNull.Value )
{
return false;
}
return ( objectA.Equals( objectB ) );
}
private bool RowEqual(DataRow rowA, DataRow rowB, DataColumnCollection columns)
{
bool result = true;
for ( int i = 0; i < columns.Count; i++ )
{
result &= ColumnEqual( rowA[ columns[ i ].ColumnName ], rowB[ columns[ i ].ColumnName ] );
}
return result;
}
private void ParseFieldList(string fieldList, bool allowRelation)
{
if ( m_FieldList == fieldList )
{
return;
}
m_FieldInfo = new ArrayList();
m_FieldList = fieldList;
FieldInfo Field;
string[] FieldParts;
string[] Fields = fieldList.Split( ',' );
for ( int i = 0; i <= Fields.Length - 1; i++ )
{
Field = new FieldInfo();
FieldParts = Fields[ i ].Trim().Split( ' ' );
switch ( FieldParts.Length )
{
case 1:
//to be set at the end of the loop
break;
case 2:
Field.FieldAlias = FieldParts[ 1 ];
break;
default:
return;
}
FieldParts = FieldParts[ 0 ].Split( '.' );
switch ( FieldParts.Length )
{
case 1:
Field.FieldName = FieldParts[ 0 ];
break;
case 2:
if ( allowRelation == false )
{
return;
}
Field.RelationName = FieldParts[ 0 ].Trim();
Field.FieldName = FieldParts[ 1 ].Trim();
break;
default:
return;
}
if ( Field.FieldAlias == null )
{
Field.FieldAlias = Field.FieldName;
}
m_FieldInfo.Add( Field );
}
}
private DataTable CreateTable(string tableName, DataTable sourceTable, string fieldList)
{
DataTable dt;
if ( fieldList.Trim() == "" )
{
dt = sourceTable.Clone();
dt.TableName = tableName;
}
else
{
dt = new DataTable( tableName );
ParseFieldList( fieldList, false );
DataColumn dc;
foreach ( FieldInfo Field in m_FieldInfo )
{
dc = sourceTable.Columns[ Field.FieldName ];
DataColumn column = new DataColumn();
column.ColumnName = Field.FieldAlias;
column.DataType = dc.DataType;
column.MaxLength = dc.MaxLength;
column.Expression = dc.Expression;
dt.Columns.Add( column );
}
}
if ( ds != null )
{
ds.Tables.Add( dt );
}
return dt;
}
private void InsertInto(DataTable destTable, DataTable sourceTable,
string fieldList, string rowFilter, string sort)
{
ParseFieldList( fieldList, false );
DataRow[] rows = sourceTable.Select( rowFilter, sort );
DataRow destRow;
foreach ( DataRow sourceRow in rows )
{
destRow = destTable.NewRow();
if ( fieldList == "" )
{
foreach ( DataColumn dc in destRow.Table.Columns )
{
if ( dc.Expression == "" )
{
destRow[ dc ] = sourceRow[ dc.ColumnName ];
}
}
}
else
{
foreach ( FieldInfo field in m_FieldInfo )
{
destRow[ field.FieldAlias ] = sourceRow[ field.FieldName ];
}
}
destTable.Rows.Add( destRow );
}
}
private void ParseGroupByFieldList(string FieldList)
{
if ( GroupByFieldList == FieldList )
{
return;
}
GroupByFieldInfo = new ArrayList();
FieldInfo Field;
string[] FieldParts;
string[] Fields = FieldList.Split( ',' );

