using System;
using System.Reflection;
using System.Collections;
using System.Resources;
using System.Windows.Forms;
using System.Data;
using System.Collections.Generic;
namespace Core.StlMes.Client.Sale.SaleFundMgt.Util
{
public class DataSetUtil
{
#region 获取一个ds的行数,为null or table==0 or rows = 0 都返回0
///
/// 获取一个ds的行数
///
///
///
public static int Count(DataSet ds)
{
try
{
return ds.Tables[0].Rows.Count;
}
catch
{
}
return 0;
}
#endregion
#region 获取整个系统中出现的为number类型的字段,并返回hstb
public static Hashtable GetNumberColumnByHsTb()
{
string[] columnName = new string[]
{
"QUANTITY","WEIGHT","PRICE","MONEY","BASEPRICE",
"ALLWEIGHT","TRANSMONEY","INVOICETRANSMONEY","BPRICE","PLY",
"WIDTH","LENGTH","ZYFMONEY","TESTPRICE","TRANSMONEYQC",
"TRANSMONEYSY1","CARFMONEY","FCPRICE"
};
Hashtable hs = new Hashtable();
foreach (string s in columnName)
{
try
{
hs.Add(s, "System.Decimal");
}
catch
{
}
}
return hs;
}
#endregion
#region 根据传入的字段组合一个ds,并返回,ds 字段默认类型string
///
/// 根据传入的字段组合一个ds,并返回,ds 字段默认类型string
///
///
///
public static DataSet GetDataSetByTbColumn(string[] columnName)
{
if (columnName == null || columnName.Length == 0)
return null;
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataColumn column = null;
foreach (string s in columnName)
{
column = new DataColumn(s, System.Type.GetType("System.String"));
dt.Columns.Add(s);
}
ds.Tables.Add(dt);
return ds;
}
#endregion
#region 根据字段名称以及字段类型组合ds,没有指定字段类型的默认string
///
/// 根据字段名称以及字段类型组合ds,没有指定字段类型的默认string
///
///
///
///
public static DataSet GetDataSetByTbColumn(string[] columnName, Hashtable hs)
{
if (columnName == null || columnName.Length == 0 || hs == null)
return null;
DataSet ds = new DataSet();
DataTable dt = new DataTable();
DataColumn column = null;
foreach (string s in columnName)
{
try
{
if (hs.Contains(s))
{
column = new DataColumn(s, System.Type.GetType(hs[s].ToString()));
}
else
{
column = new DataColumn(s, System.Type.GetType("System.String"));
}
dt.Columns.Add(s);
}
catch
{
}
}
ds.Tables.Add(dt);
return ds;
}
///
/// 按给定的字段列表,columnList,组合一个ds,名称和dssource相同,类型从dssource查找
/// 并填充
///
///
///
///
public static DataSet GetDataSetWithTbColumnAndSourceDataSet(DataSet dsSource,string [] columnList)
{
if (Util.DataSetUtil.Count(dsSource) == 0)
return dsSource;
if (columnList.Length == 0)
return dsSource;
DataSet dsNew = new DataSet();
DataTable dtNew = new DataTable();
DataColumn dc = null;
dsNew.Tables.Add(dtNew);
foreach (string s in columnList)
{
try
{
if(dsSource.Tables[0].Columns.Contains(s))
dc = new DataColumn(s, dsSource.Tables[0].Columns[s].DataType);
else
dc = new DataColumn(s, System.Type.GetType("System.String"));
dsNew.Tables[0].Columns.Add(dc);
}
catch
{
}
}
dsNew.Merge(dsSource, false, System.Data.MissingSchemaAction.Ignore);
dsNew.AcceptChanges();
return dsNew;
}
public static DataSet GetDataSetWithTbColumnAndSourceDataSet(DataSet dsSource, string[] columnList,string [] columnListCaption)
{
if (dsSource == null)
return dsSource;
if (columnList.Length == 0)
return dsSource;
DataSet dsNew = new DataSet();
DataTable dtNew = new DataTable();
DataColumn dc = null;
dsNew.Tables.Add(dtNew);
for (int i = 0; i < columnList.Length; i++)
{
try
{
dc = new DataColumn(columnList[i], dsSource.Tables[0].Columns[columnList[i]].DataType);
dc.Caption = columnListCaption[i];
dsNew.Tables[0].Columns.Add(dc);
}
catch
{
}
}
dsNew.Tables[0].Merge(dsSource.Tables[0], true, MissingSchemaAction.Ignore);
dsNew.AcceptChanges();
return dsNew;
}
///
/// 根据hs,字段名和标题名,以及源数据集,组合新的数据集并返回
///
///
///
///
public static DataSet GetDataSetWithTbColumnAndSourceDataSetWithCaption(DataSet ds, Hashtable hs)
{
if (hs == null || hs.Keys.Count == 0)
return null;
if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
return null;
DataSet dsNew = new DataSet();
DataTable dtNew = new DataTable();
DataColumn dc = null;
dsNew.Tables.Add(dtNew);
foreach (string s in hs.Keys)
{
try
{
dc = new DataColumn(s, ds.Tables[0].Columns[s].DataType);
dc.Caption = hs[s].ToString();
dsNew.Tables[0].Columns.Add(dc);
}
catch
{
}
}
dsNew.Tables[0].Merge(ds.Tables[0],true,MissingSchemaAction.Ignore);
dsNew.AcceptChanges();
return dsNew;
}
#endregion
#region 根据现有的数据集sourceDs,和空集合targetDs,将sourceDs数据按同字段存入到targetDs
///
/// 根据现有的数据集sourceDs,和空集合targetDs,将sourceDs数据按同字段存入到targetDs
///
///
///
public static void MergeDataSetFromSourceDsToTargetDsBySameColumnName(ref DataSet targetDs, DataSet sourceDs)
{
if (sourceDs == null || sourceDs.Tables.Count == 0 || sourceDs.Tables[0].Rows.Count == 0)
return;
if (targetDs == null)
return;
try
{
DataRow drTarget = null;
// 循环表
foreach (DataRow dr in sourceDs.Tables[0].Rows)
{
drTarget = targetDs.Tables[0].NewRow();
// 循环获取列名
foreach (DataColumn dc in targetDs.Tables[0].Columns)
{
try
{
// 相同列字段赋值
drTarget[dc.ColumnName] = dr[dc.ColumnName];
}
catch
{
}
}
// 新增行数据
targetDs.Tables[0].Rows.Add(drTarget);
}
targetDs.AcceptChanges();
}
catch
{
}
}
#endregion
#region 根据现有的数据集sourceDs,和空集合targetDs,将sourceDs数据按同字段存入到targetDs
///
/// 根据现有的数据集sourceDs,和空集合targetDs,将sourceDs数据按同字段存入到targetDs
///
///
///
public static DataSet GetDataSetWithSameColumnOfTargetDs(DataSet targetDs, DataSet sourceDs)
{
if (sourceDs == null || sourceDs.Tables.Count == 0 || sourceDs.Tables[0].Rows.Count == 0)
return targetDs;
if (targetDs == null)
return null;
DataSet dsReturn = targetDs.Clone();
try
{
DataRow drTarget = null;
// 循环表
foreach (DataRow dr in sourceDs.Tables[0].Rows)
{
drTarget = dsReturn.Tables[0].NewRow();
// 循环获取列名
foreach (DataColumn dc in targetDs.Tables[0].Columns)
{
try
{
// 相同列字段赋值
drTarget[dc.ColumnName] = dr[dc.ColumnName];
}
catch
{
}
}
// 新增行数据
dsReturn.Tables[0].Rows.Add(drTarget);
}
dsReturn.AcceptChanges();
}
catch
{
}
return dsReturn;
}
#endregion
#region 从一个数据集中获取某列的值,并存入list
///
/// 从一个数据集中获取某列的值,并存入list
///
/// 数据源
/// 列名,全部大写
///
public static ArrayList GetColumnValueFromDataSourceByColumnName(DataSet dsSource, string columnName)
{
ArrayList list = new ArrayList();
if (dsSource == null || dsSource.Tables.Count == 0 || dsSource.Tables[0].Rows.Count == 0 || columnName.Length == 0)
return list;
if (!dsSource.Tables[0].Columns.Contains(columnName.ToUpper()))
return list;
try
{
foreach (DataRow dr in dsSource.Tables[0].Rows)
{
try
{
list.Add(dr[columnName.ToUpper()].ToString());
}
catch
{
break;
}
}
}
catch
{
}
return list;
}
public static List GetColumnStringValueFromDataSourceByColumnName(DataSet dsSource, string columnName)
{
List list = new List();
if (dsSource == null || dsSource.Tables.Count == 0 || dsSource.Tables[0].Rows.Count == 0 || columnName.Length == 0)
return list;
if (!dsSource.Tables[0].Columns.Contains(columnName.ToUpper()))
return list;
try
{
foreach (DataRow dr in dsSource.Tables[0].Rows)
{
try
{
list.Add(dr[columnName.ToUpper()].ToString());
}
catch
{
break;
}
}
}
catch
{
}
return list;
}
#endregion
#region 从一个ds中,按条件过滤数据
public static DataSet GetDataSetByRowFilter( DataSet ds, string rowFilter)
{
try
{
DataSet dsTemp = new DataSet();
DataSet dsReturn = new DataSet();
if (dsTemp == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0)
return ds;
dsTemp = ds.Copy();
DataView dv = dsTemp.Tables[0].DefaultView;
dv.RowFilter = rowFilter;
DataTable dt = dv.ToTable();
dsReturn.Tables.Add(dt);
return dsReturn;
}
catch
{
return null;
}
}
#endregion
#region 给ds排序
///
/// 降序排一个ds
///
/// 待排序ds
/// 排序字段
///
public static DataSet ReturnDsByDescOrderFromSourceDataSet(DataSet dsSource, string sortColumn)
{
DataSet ds = new DataSet();
try
{
if (dsSource != null & dsSource.Tables.Count > 0)
{
if (!dsSource.Tables[0].Columns.Contains(sortColumn))
return dsSource.Copy();
if (dsSource.Tables[0].Rows.Count == 0)
ds = dsSource.Clone();
else
{
DataView dv = new DataView(dsSource.Tables[0]);
dv.Sort = string.Format("{0} desc", sortColumn.ToUpper());
ds.Clear();
ds.Tables.Add(dv.ToTable());
}
}
}
catch
{
}
return ds;
}
///
/// 升序排一个ds
///
/// 待排序ds
/// 排序字段
///
public static DataSet ReturnDsByAscOrderFromSourceDataSet(DataSet dsSource, string sortColumn)
{
DataSet ds = new DataSet();
try
{
if (dsSource != null & dsSource.Tables.Count > 0)
{
if (!dsSource.Tables[0].Columns.Contains(sortColumn))
return dsSource.Copy();
if (dsSource.Tables[0].Rows.Count == 0)
ds = dsSource.Clone();
else
{
DataView dv = new DataView(dsSource.Tables[0]);
dv.Sort = string.Format("{0} asc", sortColumn.ToUpper());
ds.Clear();
ds.Tables.Add(dv.ToTable());
}
}
}
catch
{
}
return ds;
}
#endregion
}
}