-
dataTable
2016-10-10 16:00:34项目中使用的一款表格框架,整合了大量的有的没有的功能 需要导包:jquery.dataTables.js和H-ui.min.css ... 翻页操作什么的都是交给dataTable。...dataTable的参数配置:一般而言根据自己的需求配置(并不需要项目中使用的一款表格框架,整合了大量的有的没有的功能
需要导包:jquery.dataTables.js
官网:https://www.datatables.net/
翻页操作什么的都是交给dataTable。
使用操作步骤
dataTable的参数配置:一般而言根据自己的需求配置(并不需要改变什么),最多修改一下每页显示的数据量和排序功能。
<span style="font-size:18px;">"bStateSave": true,//状态保存 "bPaginate": true, //翻页功能 "bLengthChange": false, //改变每页显示数据数量 "bFilter": false, //过滤功能 "bSort": false, //排序功能 "bInfo": true,//页脚信息,显示于左下角,显示有几条记录, "bAutoWidth": false,//自动宽度,当需要自定义table的显示宽度时设置为false "iDisplayLength": 20, //每页显示20条记录,默认条件为20 //显示样式需要修改时,如第一列需要左对齐,第二列需要右对齐,dataTable是不能在columnDefs的render来给td复制属性的,改样式表是无法做到每个都是特定的, //好在dataTable提供了createdRow属性 "createdRow": function (row, data, dataIndex) { $(row).children('td').eq(4).attr('style', 'text-align: right;'); $(row).children('td').eq(5).attr('style', 'text-align: right;'); $(row).children('td').eq(6).attr('style', 'text-align: left;') },</span>
一次性请求所有数据:(后端不分页,前段分页)
<span style="font-size:18px;">$.ajax({ url: "userMappermissionList.aspx", data: { "method": "canclePermission", "UserId": UserIdVar, "MapId": id }, }); //根据后台封装好的json取数据,具体可以查看相应报文(dataTable的th个数要和你要显示的属性个数匹配,不然会报错) "columns":[ {"data":"id" }, {"data":"name"} ..... ] </span>
多次查询:每次翻页操作都是重新向数据库请求新的数据,而且每次都自请求一页的数据
fnServerData属性为请求操作。
sSource:对应sAjaxSource请求数据源操作
aoData:dataTable封装的数据,包括echo,起始id,每页长度,后台获取方式是使用request[*][value]获取
<span style="font-size:18px;">"bProcessing": false, // 是否显示取数据时的那个等待提示 "bServerSide": true,//这个用来指明是通过服务端来取数据 "sAjaxSource": "userMappermissionList.aspx",//这个是请求的地址 "fnServerData": function (sSource, aoData, fnCallback) {// 获取数据的处理函数 $.ajax({ "dataType": 'json', "type": "POST", "url": sSource,//这个就是请求地址对应sAjaxSource //aoData是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数 "data": { "aoData": aoData, "method": "GetMapInfoByUserId", "UserId": UserIdVar, "DataStatus": DataStatus, "dateMin": dateMin, "dateMax": dateMax }, //回调函数,显示 "success": function (msg) { fnCallback(msg); }, error: function (xhr, textStatus, error) { if (typeof console == "object") { console.log(xhr.status + "," + xhr.responseText + "," + textStatus + "," + error); } } }); </span>
(分页查询的响应正文是在后台自己封装的)
columnDefs属性设置每个列的属性要怎么显示,targets对应的列数,data对应传入的参数,render返回显示结果,bvisible是否显示。
外部设置查询条件:
外部根据对象的属性来查询响应的数据
<span style="font-size:18px;">var table = $('#table').DataTable(); table.ajax.reload();</span>
重新载入dataTable。
补充:
在dataTable使用时遇到的问题:
1、一个单元格需要同一行的多个数据来决定时(需要传入id、再根据此时的状态status来决定显示样式)。
columnDefs 中有时为了根据多个对象决定一些显示时,可以使用columnDefs 的render中的full,full包含一行的所有数据,full是一个数组格式
完整实例:
<span style="font-size:18px;">var ip = ""; var dateMin = ""; var dateMax = ""; var table = { "bStateSave": true,//状态保存 "bPaginate": true, //翻页功能 "bLengthChange": false, //改变每页显示数据数量 "bFilter": false, //过滤功能 "bSort": false, //排序功能 "bInfo": true,//页脚信息 "bAutoWidth": false,//自动宽度 "iDisplayLength": 20, //每页显示20条记录</div> "createdRow": function (row, data, dataIndex) { $(row).children('td').eq(4).attr('style', 'text-align: right;'); $(row).children('td').eq(5).attr('style', 'text-align: right;'); $(row).children('td').eq(6).attr('style', 'text-align: left;') }, "bProcessing": false, // 是否显示取数据时的那个等待提示 "bServerSide": true,//这个用来指明是通过服务端来取数据 "sAjaxSource": "userLog.aspx",//这个是请求的地址 "fnServerData": function (sSource, aoData, fnCallback) {// 获取数据的处理函数 $.ajax({ "dataType": 'json', "type": "POST", "url": sSource,//这个就是请求地址对应sAjaxSource "data": { "aoData": aoData, "method": "loadUserLog", "IP": ip, "dateMin": dateMin, "dateMax": dateMax },//这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数 "success": function (msg) { fnCallback(msg); }, error: function (xhr, textStatus, error) { if (typeof console == "object") { console.log(xhr.status + "," + xhr.responseText + "," + textStatus + "," + error); } } }); }, //时间输出格式的修改 "columnDefs": [{ "targets": [3], "data": [3], "render": function (data, type, full) { if (data == "0001/1/1 0:00:00") { return "<td class='td-manage'></td>"; } else { return "<td class='td-manage'>" + data + "</td>"; } } } ] } //search function search() { ip = $("#IP").val(); dateMin = $("#datemin").val(); dateMax = $("#datemax").val(); var table = $('#table').DataTable(); table.ajax.reload(); } $(document).ready(function () { $("#table").dataTable(table); }); </span>
-
DataTable
2014-12-11 15:39:48Clear:清除所有数据的 DataTable。 Clone:克隆 DataTable 的结构,包括所有 DataTable 架构和约束。 Compute:计算用来传递筛选条件的当前行上的给定表达式。 Copy:复制该 DataTable 的结构和数据。 Load...Clear:清除所有数据的 DataTable。
Clone:克隆 DataTable 的结构,包括所有 DataTable 架构和约束。
Compute:计算用来传递筛选条件的当前行上的给定表达式。
Copy:复制该 DataTable 的结构和数据。
Load(IDataReader):通过所提供的 IDataReader,用某个数据源的值填充 DataTable。 如果 DataTable 已经包含行,则从数据源传入的数据将与现有的行合并。
Merge(DataTable):将指定的 DataTable 与当前的 DataTable 合并。
Select():获取所有 DataRow 对象的数组。
WriteXml(Stream):使用指定的 Stream 以 XML 格式写入 DataTable 的当前内容。 -
DataTable
2007-07-24 16:48:00datatabel 在.net 2.0中变得更加强大,写这篇文章时我觉得有个问题很难决定,我是把它放在ado.net 中还是发在asp.net中,毕竟我经常在asp.net 中使用datatable对象,但是datatable和dataset 非常的紧密,最终决定...datatabel 在.net 2.0中变得更加强大,写这篇文章时我觉得有个问题很难决定,我是把它放在ado.net 中还是发在asp.net中,毕竟我经常在asp.net 中使用datatable对象,但是datatable和dataset 非常的紧密,最终决定放在ado.net中,正好手中有本讲ado.net的书,我会把读书的心得拿出来和大家分享。
一。创建一个内存表,下面的代码会用到它
DataTable auto = new DataTable();auto.Columns.Add("ID");
auto.Columns.Add("Name");
for(int i=1;i<=10;i++)
{
auto.Rows.Add(new object[]{i,"baibaoqing"});
}
二。下面介绍DataTable对象经常使用的方法
1. DataTable 的复制和克隆
创建DataTable的完全副本(full copu 复制表的结构和数据),通过DataTable的Copy方法实现
DataTable copy_Table=auto.Copy()
for(int i=0;i<copy_Table.Rows.Length;i++)
{
Response.Write("<script>alert("+copy_Table.Rows[i][0]+");</script>");
}
输出的结果为从0到10 的数字
有时需要复制DataTable 的表模式(表结果)而不复制数据,可以使用DataTable的Clone方法
DataTable clone_Table=auto.Clone();
在克隆了一个DataTable后,可能需要DataTable对象中的某些DataRow对象(行数据)复制到克隆的DataTabel 中,可以使用DataTable 的ImPortRow方法
clone_Table.ImportRow(auto.Rows[0]);
2.枚举DataTable
通过Foreach循环遍历DataTable的行和列
System.Text.StringBuilder buffer=new System.Text.StringBuiler();
foreach(DataColumn dc in auto.Colmns)
{
buffer.Append(String.Format(“{0,15}”,dc.ColumnName));
}
buffer.Append("/r/t");
foreach(DataRow dr in auto.Rows)
{
foreach(DataColumn dc in auto.Colmns)
{
buffer.Append(String.Format("{0,15}",dr[dc]));
}buffer.Append("/r/t");
}
textbox1.Text=buffer.ToString();
三. 使用DataView
1. Sort排序
DataView view=new DataView(auto);
view.Sort="Make ASC,Year DESC";
不过我很少使用DataView 的排序功能,我的作法是在SQL语句中使用Order by
2. 使用RowFilter 精确查找
DataView view=new DataView(auto);
view.RowFilter="Make like 'AA%' and Year>2001";
同样也可以在SQL语句中设置查询条件,看个人的习惯和实际的需要了。
3 将DataView 导出到一个新表
DataTable new_Table=view.ToTable("MyTable",true,"id","name");
MyTable 新表的名称,true 表示显示不同的值,将相同的行删除(相当于Sql 的distinct),
id 和name 为新表的列ID.
4. 枚举DataView
和枚举DataTabe大同小异
System.Text.StringBuilder buffer=new System.Text.StringBuiler();
foreach(DataColumn dc in auto.Colmns)
{
buffer.Append(String.Format(“{0,15}”,dc.ColumnName));
}
buffer.Append("/r/t");
foreach(DataRowView dv in view)
{
foreach(DataColumn dc in auto.Colmns)
{
buffer.Append(String.Format("{0,15}",dv[dc]));
}buffer.Append("/r/t");
}
textbox1.Text=buffer.ToString();
另外在.net 2.0中DataTable对象可以处理XML文件,和DataSet一样,DataTable对象也有ReadXml和WriteXml 的方法,没有具体用过,有机会使用时再做总结。
------------------------------------------------------------------------------------------------------------------------------------------
很多情形下我们需要知道表的主键是什么。在ADO.Net中提供了DataTable可以映射数据库的表。于是便可以利用DataTable的属性PrimaryKey,它是DataColumn[] 类型是一个数组。我们可以使用如下的代码
DataColumn[] cols;
cols = Table.PrimaryKey;
//注意不是cols是DataColumn数组,不是DataColumn变量。这样做主要是为了处理联合主键的问题。
for(int i = 0; i < cols.Length; i++)
{
MessageBox.Show(cols[i].ColumnName);
}
按理这个问题就已经解决了,但是cols.Length却是0。原来在默认的情况下填充DataTable时并没有从数据库中取的主键的信息。如何获得主键呢?经过研究发现在填充Dataset的时候可以使用DataAdapter的MissingSchemaAction属性帮助我们解决这个问题,于是有如下的代码://使用DataAdapter填充DataTable
dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
dataadapter.Fill(Table);
DataColumn[] cols;
cols = Table.PrimaryKey;
//注意不是cols是DataColumn数组,不是DataColumn变量。这样做主要是为了处理联合主键的问题。
for(int i = 0; i < cols.Length; i++)
{
MessageBox.Show(cols[i].ColumnName);
}
这样我们便可以如愿以偿了。MissingSchemaAction属性是确定现有Dataset(或DataTable)架构与传入数据不匹配时需要执行的操作。MissingSchemaAction.AddWithKey是枚举值,它的作用是添加必需的列和主键信息以完成架构,利用它用户可以在每个 DataTable上显式设置主键约束。------------------------------------------------------------------------------------------------------------------------------------------
DataTable中数据记录的统计
我们在使用Sql Server这些数据库时,可以轻松的通过Sum、Aver、Count等统计出相关结果,那么,在已经把数据检索出来的DataSet(DataTable)中呢?特别是通过Web Service获得了DataSet,这个时候,可是没有办法回头去修改Select语句来获取这些统计了。那么在DataSet/DataTable中是否可以进行统计呢?
在MSDN中,有一篇MS推荐的统计方法,就是逐行对数据进行求和统计,这个方法,其实有等于无(或许这个方法只是针对于DataGrid求取小计用吧),因为这个方法中采用的是DataGrid的ItemDataBind事件来对数据进行累加,同我们手动写代码统计没有什么区别。本文介绍一个简单的方法,不需要逐条记录进行计算就可以轻松的获得DataTable中的记录统计结果。这个简单的方法就是调用功能强大的DataTable的函数Compute。
一、调用说明(仅以C#为例,下同):
public object Compute(string strExpression,string strFilter)
参数:
strExpression:要计算的表达式字符串,基本上类似于Sql Server中的统计表达式
strFilter:统计的过滤字符串,只有满足这个过滤条件的记录才会被统计
二、调用举例:
以下示例,假设一个产品销售表table,描述某商场中各促销员销售的实际记录,包含字段为:姓名(Name)、性别(Sex,0为女,1为男)、生日(Birthday)、销售产品的代码(ProID)、销售的数量(Quantity)、销售价格(Price)。
1。统计所有性别为女的销售员的数量:
table.Compute("Count(*)","Sex=0");2。统计所有销售员中年龄大于20岁的
table.Compute("Count(*)","Birthday<'"+today);//today为今天的日期字符串3。统计销售产品的平均价格
table.Compute("Aver(Price)","true");4。统计产品代码为1的产品销售数量:
table.Compute("Sum(Quantity)","ProID=1");5。统计所有产品的销售总金额:
要统计总销售金额,由于table中不存在某项产品某个促销员销售的金额数据,但我们可以通过Quantity*Price来获得。比如:
table.Compute("Sum(Quantity*Price)","true");这里一个问题是:DataTable的统计功能没有SqlServer强,这个统计是错误的,因为Compute的统计不具备Sum(Quantity*Price)这样数据的功能。那怎么办呢?
对于这样复杂数据的统计,我们可以在DataTable中创建一个新的字段来完成,比如Amount,同时设置该字段的Expression为Quantity*Price,这样我们就可以使用统计功能了:
table.Compute("Sum(Amount)","true");以上都是计算每一列的合计,要添加一行求合计可以使用下面的方法:
System.Data.DataRow dataRow=dataSet.Tables[0].NewRow()
'假设你的DataSet为dataSet,表在索引0位置,同时假设你的所有字段都是可以求合计的。
转地址:http://chinesewind.cnblogs.com/archive/2005/11/30/287957.htmlSystem.DataRow dataRow = new System.DataRow();
dataRow=DT.NewRow();然后就是统计了:
int i ;
int fldCnt ;fldCnt=DT.Cols.Count;
for( i=0 ;i< fldCnt-1;i++)
dataRow(i)=DT.Compute("Sum("+i.ToString()+")","true");DT.Rows.Add(dataRow);
好了,大功告成。希望对大家有用。
-------------------------------------------------------------------------------------------
在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的Inner Join方法,返回DataTable的所有列。
如果两个DataTable中的DataColumn有重复的话,把第二个设置为ColumnName+"_Second",下面是代码,希望对大家有所帮助。
using System;
using System.Data; CHINAZnamespace WindowsApplication1
{
public class SQLOps
{
public SQLOps()
{
}
public static DataTable Join (DataTable First, DataTable Second, DataColumn[] FJC, DataColumn[] SJC)
{
//创建一个新的DataTable
DataTable table = new DataTable("Join");
// Use a DataSet to leverage DataRelation
using(DataSet ds = new DataSet()) CHINAZCHINAZ
{
//把DataTable Copy到DataSet中ds.Tables.AddRange(new DataTable[]{First.Copy(),Second.Copy()});
CHINAZ
DataColumn[] parentcolumns = new DataColumn[FJC.Length];
CHINAZfor(int i = 0; i < parentcolumns.Length; i++)
{
parentcolumns[i] = ds.Tables[0].Columns[FJC[i].ColumnName];
}
DataColumn[] childcolumns = new DataColumn[SJC.Length];
for(int i = 0; i < childcolumns.Length; i++)
{
childcolumns[i] = ds.Tables[1].Columns[SJC[i].ColumnName]; CHINAZCHINAZ
}//创建关联
DataRelation r = new DataRelation(string.Empty,parentcolumns,childcolumns,false);
ds.Relations.Add(r); CHINAZ//为关联表创建列
for(int i = 0; i < First.Columns.Count; i++)
{
table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType);
}
for(int i = 0; i < Second.Columns.Count; i++)
{
//看看有没有重复的列,如果有在第二个DataTable的Column的列明后加_SecondCHINAZ
if(!table.Columns.Contains(Second.Columns[i].ColumnName))
table.Columns.Add(Second.Columns[i].ColumnName, Second.Columns[i].DataType);
else
table.Columns.Add(Second.Columns[i].ColumnName + "_Second", Second.Columns[i].DataType);
}
table.BeginLoadData();
foreach(DataRow firstrow in ds.Tables[0].Rows)CHINAZ
{
//得到行的数据
DataRow[] childrows = firstrow.GetChildRows(r);
if(childrows != null && childrows.Length > 0)
{
object[] parentarray = firstrow.ItemArray;
foreach(DataRow secondrow in childrows)CHINAZ
{
object[] secondarray = secondrow.ItemArray;
object[] joinarray = new object[parentarray.Length+secondarray.Length];
Array.Copy(parentarray,0,joinarray,0,parentarray.Length);
Array.Copy(secondarray,0,joinarray,parentarray.Length,secondarray.Length); CHINAZ
table.LoadDataRow(joinarray,true);
}
}
}
table.EndLoadData();
}
return table;
}
public static DataTable Join (DataTable First, DataTable Second, DataColumn FJC, DataColumn SJC)CHINAZ
{
return Join(First, Second, new DataColumn[]{FJC}, new DataColumn[]{SJC});
}
public static DataTable Join (DataTable First, DataTable Second, string FJC, string SJC)
{
return Join(First, Second, new DataColumn[]{First.Columns[FJC]}, new DataColumn[]{First.Columns[SJC]});
}
}
}--------------------------------------------------------------------------------------------------------------------------------------------
DataTable操作中的性能问题 最近的一项工作是关于性能提升方面的。要做的第一个事情是要把很多同类型的DataTable合并到一起,查了很多关于DataTable的相关函数以后,我决定用Merge函数来合并这些DataTable。
DataTable[] srcTables = ... ;
foreach( DataTable src in srcTables )
{
dest.Merge( src ) ;
}
但是测试的结果让我很是失望,性能不是一般的不好。经过调查发现性能的瓶颈在Merge函数这里。后来经过测试,发现如果用下面的代码:
DataTable[] srcTables = ... ;
foreach( DataTable src in srcTables )
{
foreach( DataRow row in src.Rows)
{
dest.ImportRow( row ) ;
}
}
结果让人惊奇的是,下面的代面的速度是上面的代码速度的100倍!
还做了一个事情,就是对DataTable进行filter的时候 ,我的一个同事和我说了以下的代码:
DataView dv = dt.DefaultView ;
dv.RowFilter = filter ;
DataTable result = dv.ToTable() ;
上面的代码是能工作的,但是它的性能一点都不好,后来我把上面的代码改成了:
DataRow[] rows = dv.Select( filter ) ;
foreach( DataRow row in rows )
{
result.ImportRow(row) ;
}
也有数十倍的性能提高。
没想到有这么多的朋友看这个文章,我看了一下Table的Merge函数,下面是关键函数:
private void MergeTable(DataTable src, DataTable dst)
{
int count = src.Rows.Count;
bool flag = dst.Rows.Count == 0;
if (0 < count)
{
Index ndx = null;
DataKey srcKey = new DataKey();
dst.SuspendIndexEvents();
tr从中我们可以看到Merge做了什么,Merge Table的时候,对每一行,都要有一个对Index进行操作的过程,查看现在要进行insert的row是不是存在重复等等操作。而对我们只想进行append操作的时候,显然是多余的了。 我们先看一段WEB Service的代码。
[WebMethod]
public DataTable GetInfo()
...{
OleDbConnection nwindConn = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=D:Northwind orthwind.mdb;");
OleDbCommand selectCMD =
new OleDbCommand("SELECT CustomerID, CompanyName FROM Customers"
, nwindConn);
selectCMD.CommandTimeout = 30;
OleDbDataAdapter custDA = new OleDbDataAdapter();
custDA.SelectCommand = selectCMD;
DataSet custDS = new DataSet();
custDA.Fill(custDS, "Customers");
return custDS.Tables[0];
}
在.net 1.1 中,这是典型的一个错误,在.net 1.1 、1.0中,WEB Service 的返回或者输入参数不能是 DataTable,这是一个众人皆知的知识点。原因就是 DataTable 不象DataSet那样支持序列化。在.net 1.1中,我们解决这个问题的方法就是使用DataSet。但是使用DataSet 的时候,经常会有一种杀鸡用牛刀的感觉。
附:.net 1.1 中使用DataTable作为WEB Service 返回值会报以下异常:
类型 System.ComponentModel.ISite 的成员 System.ComponentModel.MarshalByValueComponent.Site 是接口,因此无法将其序列化。
在.net 2.0 中,以上同样的代码,则没有任何问题了。原因是2.0中 DataTable实现了序列化、反序列。
在VS2005 Beta2 的文档中,我们可以看到2.0 中 DataTable实现了以下接口:
Explicit Interface Implementations
System.ComponentModel.IListSource.get_ContainsListCollection
System.ComponentModel.IListSource.GetList
System.Xml.Serialization.IXmlSerializable.GetSchema
System.Xml.Serialization.IXmlSerializable.ReadXml
System.Xml.Serialization.IXmlSerializable.WriteXml
而在1.1中,DataTable 只实现了一个接口:
Explicit Interfa而在1.1中,DataTable 只实现了一个接口:
Explicit Interface Implementations
System.ComponentModel.IListSource.ContainsListCollection
把DataSet中的一些功能移到 DataTable中,2.0 中还有 Merge 方法,即合并数个数据集。
DataTable的代码合并参看下面代码。
private static void DemonstrateMergeTable()
...{
DataTable table1 = new DataTable("Items");
DataColumn column1 = new DataColumn("id", typeof(System.Int32));
DataColumn column2 = new DataColumn("item", typeof(System.Int32));
table1.Columns.Add(column1);
table1.Columns.Add(column2);
table1.PrimaryKey = new DataColumn[] ...{ column1 };
table1.RowChanged += new System.Data.DataRowChangeEventHandler(Row_Changed);
DataRow row;
for (int i = 0; i <= 3; i++)
...{
row = table1.NewRow();
row["id"] = i;
row["item"] = i;
table1.Rows.Add(row);
}
// Accept changes.
table1.AcceptChanges();
DataTable table2 = table1.Clone();
row = table2.NewRow();
row["id"] = 14;
row["item"] = 774;
table2.Rows.Add(row);
row = table2.NewRow();
row["id"] = 12;
row["item"] = 555;
table2.Rows.Add(row);
row = table2.NewRow();
row["id"] = 13;
row["item"] = 665;
table2.Rows.Add(row);
// Merge table2 into the table1.
table1.Merge(table2);
}
综合上述,.net 2.0 中 DataTable 从后台的默默无问的小兵变成独当一面的大将了。 -
C#Datatable
2020-11-16 23:58:14C#操作Datatable //导入命名空间 using System.Data; 创建Datatable //创建一个空表 Datatable dt=new Datatable(); //创建一个名为NewTab的空表 Datatable dt=new Datatable("NewTab"); 创建列 //创建空列 ...C#操作Datatable
//导入命名空间 using System.Data;
创建Datatable
//创建一个空表 Datatable dt=new Datatable(); //创建一个名为NewTab的空表 Datatable dt=new Datatable("NewTab");
创建列
//创建空列 DataColumn dc=new DataColumn(); dt.Columns.Add(dc); //创建带列名和类型名的列(2种方式) dt.Columns.Add("列名",System.Type.GetType("System.String")); dt.Columns.Add("列名",typeof(String)); //指定位置添加列,根据列索引 i dt.Columns.Add("列名",System.Type.GetType("System.String")).SetOrdinal(i); dt.Columns.Add("列名",typeof(String)).SetOrdinal(i);
创建行
//1.创建空行 DataRow dr=dt.NewRow(); dt.Rows.Add(dr); //2.创建空行 dt.Rows.Add(); //3.通过行框架创建并赋值 dt.Rows.Add("张三","男","未婚"); //通过复制dt2表中的某一列来创建 dt.Rows.Add(dt2.Rows[i].ItemArray);
取值与赋值
//新建行的赋值 DataRow dr = dt.NewRow(); dr[0] = "张三";//通过索引赋值 dr["column1"] = DateTime.Now; //通过名称赋值 //对表已有行进行赋值 dt.Rows[0][0] = "张三"; //通过索引赋值 dt.Rows[0]["column1"] = DateTime.Now;//通过名称赋值 //取值 string name=dt.Rows[0][0].ToString(); string time=dt.Rows[0]["column1"].ToString();
筛选行
//选择所有行 DataRow[] drs=dt.Select(); //选择column1列值为空的行的集合 DataRow[] drs = dt.Select("column1 is null"); //选择column0列值为"李四"的行的集合 DataRow[] drs = dt.Select("column0 = '李四'"); //筛选column0列值中有"张"的行的集合(模糊查询) DataRow[] drs = dt.Select("column0 like '张%'");//如果的多条件筛选,可以加 and 或 or //筛选column0列值中有"张"的行的集合并按column1降序排序 DataRow[] drs = dt.Select("column0 like '张%'", "column1 DESC");
删除行
//使用DataTable.Rows.Remove(DataRow)方法 dt.Rows.Remove(dt.Rows[0]); //使用DataTable.Rows.RemoveAt(index)方法 dt.Rows.RemoveAt(0); //使用DataRow.Delete()方法 dt.Row[0].Delete(); dt.AcceptChanges(); //-----区别和注意点----- //Remove()和RemoveAt()方法是直接删除 //Delete()方法只是将该行标记为deleted,但是还存在,还可DataTable.RejectChanges()回滚,使该行取消删除。 //用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。 //如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。 for (int i = dt.Rows.Count - 1; i >= 0; i--) { dt.Rows.RemoveAt(i); } /*Delete()删除*/ for(int i=0;i<=dt.Rows.Count-1;i++){ if(i==2 || i==1){ dt.Rows[i].Delete(); } } dt.AcceptChanges(); Console.WriteLine(dt.Rows.Count);
复制表
//复制表,同时复制了表结构和表中的数据 DataTable dtNew = new DataTable(); dtNew = dt.Copy(); //复制表 DataTable dtNew = dt.Copy(); //复制dt表数据结构 dtNew.Clear() //清空数据 for (int i = 0; i < dt.Rows.Count; i++) { if (条件语句) { dtNew.Rows.Add(dt.Rows[i].ItemArray); //添加数据行 } } //克隆表,只是复制了表结构,不包括数据 DataTable dtNew = new DataTable(); dtNew = dt.Clone(); //如果只需要某个表中的某一行 DataTable dtNew = new DataTable(); dtNew = dt.Copy(); dtNew.Rows.Clear();//清空表数据 dtNew.ImportRow(dt.Rows[0]);//这是加入的是第一行
Datatable按照某列去重(Linq)
/*duizhaoTable 为需要删除重复行的表 dt为重后得到的新表 设备所属单位为列名 First/Last 保留每组的第一行或者最后一行*/ dt= duizhaoTable.AsEnumerable().GroupBy(p => p["设备所属单位"]).SelectMany(p => p.GroupBy(s => s["设备所属单位"]).Select(x => x.First())).CopyToDataTable<DataRow>();
-
DataTable简介
2018-04-25 16:57:52(1)构造函数DataTable() 不带参数初始化DataTable 类的新实例。DataTable(string tableName) 用指定的表名初始化DataTable 类的新实例。DataTable(string tableName, string tableNamespace) 用指定的表名和命名... -
c# DataTable
2019-04-09 17:03:16System.Data.DataTable https://blog.csdn.net/xpj8888/article/details/85763925 DataTable ,是内存中存储数据的一块单元或者地方。 怎么操作呢? C# DataTable 详解 ...DataTa... -
VB.NET:DataTable操作-DataTable的合并
2020-12-11 16:35:34两个DataTable的合并首先需要保证两个DataTable的格式是相同的,即column数量相同,名称相同 1、新建两个DataTable Dim DataTable1 As New DataTable Dim DataTable2 As New DataTable 2、为DataTable创建... -
datatable清空
2017-12-08 11:28:02$('#listTab').dataTable().fnDestroy();//还原初始化了的datatable $('#listTab').dataTable().fnClearTable();//清空一下table -
将两个DataTable合并成一个DataTable
2019-06-28 00:36:30两个结构一样的DT合并DataTable DataTable1 = new DataTable();DataTable DataTable2 = new DataTable();DataTable newDataTable = DataTable1.Clone(); object[] obj = new object[newDataTable.Columns.Count];for... -
C# 合并datatable
2020-08-20 10:47:46合并两个列相同得datatable(为了省事就直接new 了两个datatable) DataTable dataTable1 = new DataTable(); DataTable dataTable2 = new DataTable(); dataTable1.Merge(dataTable2); // 这样dataTable1里边就有... -
DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等
2018-03-23 12:59:13创建 datatable、给表datatable添加列名、给表DataTable加行,过滤表DataTable内容等。1.创建 datatable DataTable dt=new Datable();//可以给表创建一个名字,tb2.给表加个列名: dt.Columns.Add("id",... -
List转换DataTable
2020-07-24 14:51:59一 C# List转换DataTable 的方法: public static DataTable ToDataTable<T>(IEnumerable<T> list) { PropertyInfo[] modelItemType = typeof(T).GetProperties(); DataTable dataTable = new ... -
DataTable分组
2019-05-15 17:40:09DataTable dt= dbhelp.Query(sql).Tables[0]; IEnumerable<IGrouping<string, DataRow>> result = dt.Rows.Cast<DataRow>().GroupBy<DataRow, string>(dr => dr... -
DataTable相关:datatable计算功能
2012-06-07 19:55:29看了下大家对datatable的计算功能,搜集了一些例子贴上。 public class DataTableCompute { public static void SomeDataTableCompute() { DataTable myTesttable = new DataTable(); -
C# DataTable 去重
2020-08-25 09:46:59C# DataTable 的一些用法 去重 DataTable datatable = new DataTable(); datatable.DefaultView.ToTable(true); 未完,查看如些页面 https://www.cnblogs.com/Fooo/p/6666825.html?utm_source=itdadao&utm_... -
C# dataTable 单元格内插入 另一个DataTable
2019-07-11 11:27:58在利用C#做服务端,然后利用datatable向前端返回时,希望在某行数据内,添加一个数组。主要是dataTable 默认使用 datatable.columns.Add时, 未指定列的类型 默认为string,需要指定为DataTable类型! ... -
DataTable 重新加载数据要先销毁原DataTable
2019-02-19 18:36:19var datatable = $("#table").dataTable(); if (datatable) { datatable.fnClearTable(); //清空数据 datatable.fnDestroy(); //销毁datatable } updateTableRec... -
初识DataTable
2015-03-15 20:24:10在重构机房时,D层负责与数据库交互。D层对数据库进行查询...DataTable对象是组成DataSet对象的主要组件,因DataSet对象可以接收由DataAdapter对象执行SQL指令后所取得的数据,这些数据是DataTable对象的格式,所以Dat -
C#将一个DataTable分成多个DataTable
2017-09-07 05:53:41一个DataTable,想把1~10,11~20,21~30 行拆成3个新的DataTable,除了循环遍历之外,有更好的方法么? -
DataTable使用
2014-03-21 11:01:59介绍DataTable两种常见操作: 1.合并两个DataTable 2.取得DataTable中不重复的列 -
ngx-datatable
2018-08-14 17:10:00ngx-datatable是一个用于呈现大型复杂数据的Angular组件。它具有您期望从任何其他表中获得的所有功能,但是在没有外部依赖性的轻型包中。桌子设计得非常灵活轻便; 它不会对您的数据或您如何做出任何假设:对其进行... -
C# DataTable 合并多个相同结构 的 datatable
2017-11-20 16:22:32DataTable dt1 = new DataTable(); DataTable dt2 = new DataTable(); 如果dt1 和 dt2结构相同,又要想办法将dt1和dt2的数据合并到一个datatable中则可以使用如下方法: 1、新建一个DataTable ... -
c# DataTable select 过滤返回新DataTable
2017-06-20 15:55:24DataRow[] dr = dt.Select(“col='XXXX'”);//条件:就是字段名='某某' ... /// 执行DataTable中的查询返回新的DataTable /// /// 源数据DataTable /// 查询条件 /// private DataTable Ge -
DataTable Select
2017-11-17 11:50:01Select操作是大小写不敏感的(记录的字段不敏感),如果需要区分大小写,需要将DataTable的caseSensitive属性设为true。 -
DataTable合并
2013-06-01 17:12:47两个结构一样的DataTable合并 view plaincopy to clipboardprint? DataTable DataTable1 = new DataTable(); DataTable DataTable2 = new DataTable(); DataTable newDataTable = DataTable1.Clone(); object[]... -
DataTable销毁对象
2019-05-22 18:11:34dataTable动态改变列的时候需要重新销毁对象: // 动态改变列,需要先销毁对象 "columns":columns if ( $.fn.dataTable.isDataTable('#dataTable')) { $('#dataTable').DataTable().destroy(); $('#dataTable').... -
datatable第二次绑定先销毁原datatable
2017-09-21 16:00:38参考资料 ... 第一次查询结果通过datatable实现分页,第二次查询时,先销毁datatable,然后重新绑定 var datatable = $("#table").dataTable(); if (datatable) { datatable.fnCl