//testData()方法并无实质作用,只是把事例写在里面而已</span>
public void testData()
{
//创建DataTable
DataTable dt = new DataTable("Users");
//新增列
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
//或者用dt.Columns.Add("column0", System.Type.GetType("System.String"));
//设置主建
dt.Columns["id"].Unique = true;
dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };
//添加10行数据
for (int id = 1; id <= 10; id++)
{
dt.Rows.Add(
new object[] { id, string.Format("姓名{0}", id) });
}
//复制具有表中行结构的新行
DataRow dr = dt.NewRow();
dr["id"] = 3;
dr["name"] = "李某某";
dt.Rows.Add(dr);
//提交自上次调用 AcceptChanges 以来对该表进行的所有更改。
dt.AcceptChanges();
//按姓名排序查询ID>5的数据行数组
DataRow[] foundRows = dt.Select("id > 5", "name DESC");
//查询符合条件的数据行数组
DataRow[] drs = dt.Select("name is null");
DataRow[] drss = dt.Select("name = 'kyle'");
//复制表格与数据
DataTable dtNew = dt.Copy();
//只复制表格结构
DataTable Nulldt = dt.Clone();
//修改行
int r = 0; //行索引,从0开始你懂的
int c = 0; //列索引
DataRow dr = dt.Rows[r];
dr[c] = 1;
dr[c+1] = "Yan";
//或者
//dt.Rows[0]["name"]="姓名2";
//转换成字符串
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);
dt.WriteXml(xw);
string result = sw.ToString();
//转换成视图再过滤数据
dt.DefaultView.RowFilter = " name like '%张%' "; //查询张姓的用户
//RowFilter注意:针对某个DataView设置了多次RowFilter,那么最后一次的设置将生效, 设置RowFilter后使用foreach处理dataview,其实处理的是数据视图的副本,循环内对DataView的<br>RowFilter再次设置不影响foreach处理的集合副本. 当然也可以使用DataView tDv=new DataView(DataTable);来生成一个新的视图来避免冲突问题--如果使用这种方式那么就上面情况,<br>内存中将有两个dataView(对应一个datatable)如果再使用foreach进行集合便历,那么明显要多出一个dataview内存需求.
//表格排序
dt.DefaultView.Sort = "ID ,Name ASC";
dt = dt.DefaultView.ToTable();
// 对列name 汇总支持所有sql 聚合函数 如:sum(),count(),avg()...
dt.Compute("count(name)", "true");
//转成Linq进行Group By
if (dt != null && dt.Rows.Count > 0)
{
var query = from t in dt.AsEnumerable()
group t by new { t1 = t.Field<Int32>("id") } into m
select new
{
id = m.Key.t1
};
DataRow[] arrayDR = null;
if (query.ToList().Count > 0)
{
query.ToList().ForEach(q =>
{
arrayDR = dt.Select(" id=" + q.id); //获取进程行号下的所有数据
if (arrayDR.Length > 0)
{
result += q.id + "(";
foreach (DataRow dr2 in arrayDR) //多行合并成一行
{
result += dr["name"].ToString() + ",";
}
result = result.Substring(0, result.Length - 1); //去除最后面的逗号
result += ")";
}
});
}
}
//是否存在SEX列(是否存在某列)
bool isExistsColumn = dt.Columns.Contains("SEX");
//DataTable与XML间的互转
DataTable dt_AX = new DataTable();
string xml = ConvertBetweenDataTableAndXML_AX(dt_AX);
DataTable dt2 = ConvertBetweenDataTableAndXML_AX(xml);
//使用Newtonsoft.Json将DataTable转换成JSION
string json = Newtonsoft.Json.JsonConvert.SerializeObject(dt, new Newtonsoft.Json.Converters.IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" });
//或者json = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
}
//DataTable转XML
public string ConvertBetweenDataTableAndXML_AX(DataTable dtNeedCoveret)
{
System.IO.TextWriter tw = new System.IO.StringWriter();
dtNeedCoveret.TableName = dtNeedCoveret.TableName.Length == 0 ? "Table_AX" : dtNeedCoveret.TableName;
dtNeedCoveret.WriteXml(tw);
dtNeedCoveret.WriteXmlSchema(tw);
return tw.ToString();
}
//XML转DataTable
public DataTable ConvertBetweenDataTableAndXML_AX(string xml)
{
System.IO.TextReader trDataTable = new System.IO.StringReader(xml.Substring(0, xml.IndexOf("<?xml")));
System.IO.TextReader trSchema = new System.IO.StringReader(xml.Substring(xml.IndexOf("<?xml")));
DataTable dtReturn = new DataTable();
dtReturn.ReadXmlSchema(trSchema);
dtReturn.ReadXml(trDataTable);
return dtReturn;
}
//DataTable转JSION
public string DataTableToJson(string jsonName, DataTable dt)
{
StringBuilder Json = new StringBuilder();
Json.Append("{\"" + jsonName + "\":[");
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
Json.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":\"" + dt.Rows[i][j].ToString() + "\"");
if (j < dt.Columns.Count - 1)
{
Json.Append(",");
}
}
Json.Append("}");
if (i < dt.Rows.Count - 1)
{
Json.Append(",");
}
}
}
Json.Append("]}");
return Json.ToString();
}
出处:以上是我平时收集整理,部分来自网上,部分自己编写,出处已无处可寻,望部分作者谅解。
本文详细介绍如何使用DataTable进行数据操作,包括创建、添加数据、查询、排序、汇总等实用技巧,并提供了将DataTable转换为XML和JSON的方法。
436

被折叠的 条评论
为什么被折叠?



