『壹』 数据表(DataTable)处理数据与泛型(List<***>)处理数据,那个的执行效率高,而且内存占用少呢
1.List<T>是强类型化的,而DataTable不是
一般的DataTable,访问某列时,是通过string的ColumnName来取得的,比如:
string name = dt.Rows[i]["Name"].ToString();
因为是string的列名,存在记错写错的风险,且编译不检查
而List<T>,因为类型化的元素,编程时属性可以有IDE的智能感知来选择,编码更方便。
不容易出错:
string name = list[0].Name;
2.Linq的强有力支持,使得操作List<T>有前所未有的快感
其实在linq出来之前,还是DataTable用的多,因为要想过滤数据,可以用
DataView,DataTable.Select()等方法。而List<T>只能是自己写循环,麻烦。
Linq出来之后,where,join,group by,order by...等等操作,对于List<T>的查询
真是很便利。
3.DataTable的结构远比List<T>要复杂,内存占用量更大。
在有变化的场合下,DataTable里要维护不同RowState的数据(修改前的和现在的),还有Schema数据
List<T>就没有这些累赘,更轻快。
所以,Linq+List<T>才使得现在大家越来越倾向使用List<T>而不是DataTable
『贰』 datatables 数据太多翻页换行了 显示如下 首页 上一页 12345...888
默认情况下Datatables的分页就是上一页、下一页和6个页数按钮,这适合大部分情况。不过也有用户不喜欢这样,Datatables提供了四个模式供用户选择,通过设置 pagingType选项来配置:
simple - 只有上一页、下一页两个按钮
simple_numbers - 除了上一页、下一页两个按钮还有页数按钮,Datatables默认是这个
full - 有四个按钮首页、上一页、下一页、末页
full_numbers - 除首页、上一页、下一页、末页四个按钮还有页数按钮
(这是官网说明,之前我尝试过,但好像有点差别,你自己试试。 )
『叁』 .NET里面的dataset和datatable的大小有没有上限一次能装多大的数据
基本上没有限制,主要是看你的内存有多大,因为 这两个都是保存在内存中的。
不建议把大量数据都放在里面,应该根据条件去筛选。
『肆』 如何取得一个DataTable中某一列的最大项
排序一下
DataTable Dtable= XXX():
DataRow Drows = Dtable.select("int列 desc");
这样第一个和最后一个
或者
Dtable.DefaultView.sort(int列 desc)
______
更新:有个叫RowFilter的方法应该可以
——
推荐在数据选择时用sql排序
『伍』 怎么调整里面那个Datatable的大小 我想要他和外面的那个DataGridView调的一样大
你用的这控件不是有宽度的属性么?width="100%" height="100%"这样不就可以了么?
『陆』 求datatables简单小案例
之前也网络的,自己是这样写的,不知道能不能帮到你:
@RequestMapping(value="/showArticleList.action",method=RequestMethod.POST)
@ResponseBody
public Object showArticleList(Article article)
{
Map<String,Object> map=new HashMap<String,Object>();
try {
List<Article> list=articleService.findArticle(article);
long totalCount=articleService.findArticleCount(article);
map.put("list", list);
map.put("iTotalDisplayRecords", totalCount);//总记录数
return map;
} catch (Exception e) {
logger.error("showArticleList.action查询信息失败,原因:"+e.getMessage());
map.put("list", null);
map.put("iTotalDisplayRecords", 0);//总记录数
}
return map;
}
$(function () {
var table = $('#sample_1');
table.dataTable({
bFilter: false,//搜索栏
serverSide: true,//分页,取数据等等的都放到服务端去
processing: true,//载入数据的时候是否显示“载入中”
pageLength: 10,//首次加载的数据条数
ordering: false,//排序操作在服务端进行,所以可以关了。
ajax: {//类似jquery的ajax参数,基本都可以用。
type: "post",//后台指定了方式,默认get,外加datatable默认构造的参数很长,有可能超过get的最大长度。
url: "/lmtweb/article/showArticleList.action?systime=" + new Date().getTime(),
dataSrc: "list",//默认data,也可以写其他的,格式化table的时候取里面的数据
data: function (d) {//d 是原始的发送给服务器的数据,默认很长。
var param = {};//因为服务端排序,可以新建一个参数对象
param.start = d.start;//开始的序号
param.limit = d.length;//要取的数据的
// var formData = $("#filter_form").serializeArray();//把form里面的数据序列化成数组
// formData.forEach(function (e) {
// param[e.name] = e.value;
// });
return param;//自定义需要传递的参数。
},
},
columns: [//对应上面thead里面的序列
{
// "className" : "cell-chechbox",
"orderable" : false,
"data": null,
"render" : function(data, type, row, meta) {
return '<input type="checkbox" value="'+data.u_guid+'" class="checkboxes"/>';
}
},
{
data: "articleId",
},
{ data: "articleTitle", },//字段名字和返回的json序列的key对应
{ data: "articleAuthor" },
{ data: "articleSaveTime" },
// {
// data: function (e) {//这里给最后一列返回一个操作列表
// //e是得到的json数组中的一个item ,可以用于控制标签的属性。
// return '<a class="btn btn-default btn-xs show-detail-json"><i class="icon-edit"></i>显示详细</a>';
// }
// },
{
"data": null,
"render" : function(data, type, row, meta) {
return '<a href="javascript:showModify(''+data.articleId+'');" class="btn btn-circle btn-default btn-sm"><i class="fa fa-pencil"></i>修改</a>'+
'<a href="javascript:showDel(''+data.articleId+'');" class="btn btn-circle red-sunglo btn-sm"><i class="fa fa-trash"></i>删除</a>'+
'<a href="javascript:;" class="btn btn-circle red-sunglo btn-sm"><i class="fa fa-trash"></i>预览</a>';
}
}
],
initComplete: function (setting, json) {
//初始化完成之后替换原先的搜索框。
//本来想把form标签放到hidden_filter 里面,因为事件绑定的缘故,还是拿出来。
// $(tablePrefix + "filter").html("<form id='filter_form'>" + $("#hidden_filter").html() + "</form>");
},
language: {
lengthMenu: '<select class="form-control input-xsmall">' + '<option value="5">5</option>' + '<option value="10">10</option>' + '<option value="30">30</option>' + '<option value="50">50</option>' + '</select>',//左上角的分页大小显示。
processing: "载入中",//处理页面数据的时候的显示
paginate: {//分页的样式文本内容。
previous: "上一页",
next: "下一页",
first: "第一页",
last: "最后一页"
},
zeroRecords: "没有内容",//table tbody内容为空时,tbody的内容。
//下面三者构成了总体的左下角的内容。
// info: "总共_PAGES_ 页,显示第_START_ 到第 _END_ ,筛选之后得到 _TOTAL_ 条,初始_MAX_ 条 ",//左下角的信息显示,大写的词为关键字。
info: "总共_PAGES_ 页,显示第_START_ 到第 _END_ ,共 _TOTAL_ 条 ",
infoEmpty: "0条记录",//筛选为空时左下角的显示。
infoFiltered: ""//筛选之后的左下角筛选提示(另一个是分页信息显示,在上面的info中已经设置,所以可以不显示),
}
});
『柒』 ruby on rails 下如何实现jqery,datatables 的服务器分页(后台分页),数据量太大
采用will_paginate插件。
使用方法:
在controller控制器中调用查询:
@posts=Post.paginate(:page=>params[:page])
在View层添加以下代码即可
<%=will_paginate@posts%>
『捌』 一个200行数据的datatable大概占用多少内存
太少了,现在的内存都是用G来计算的,200行对它来说太少了!
你可以通过二进制序列化,把你那个datatable序列化到文件里面,你可以大概知道大小了!
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
DataTable dt = new DataTable();
bf.Serialize(ms, dt);
运行看了看,一个空的DataTable也就930个字节,在.NET 4.0里面!
『玖』 C# 如何调整DataTable的大小,有人说调整它的属性....可是它不是控件啊!!!DataGridView才是控件!!!
我的想法:
你的想法不合理。1,因为你的datatable只有这么大,如果你有10列10行,那么你要和datagridview一样大那岂不是每一项都很小,看不清。
2,如果你像实现你的想法,datatable不能调整。你理应想到调整datagridview的属性。这是一种思路,望对你有用。。
『拾』 怎么实现大批量数据的datatable导出CSV
导出csv与导出Excel是一样的,引用Aspose.Cells.dll:
///<summary>
///导出DataTable到Excel文件,使用Aspose.Cells.dll
///</summary>
///<paramname="dt">要导出的数据</param>
///<paramname="path">保存路径</param>
(DataTabledt,stringpath)
{
Workbookworkbook=newWorkbook();//工作簿
Worksheetsheet=workbook.Worksheets[0];//工作表
Cellscells=sheet.Cells;//单元格
//样式2
Stylestyle2=workbook.Styles[workbook.Styles.Add()];//新增样式
//style2.HorizontalAlignment=TextAlignmentType.Center;//文字居中
style2.Font.Name="宋体";//文字字体
style2.Font.Size=9;//文字大小
style2.Font.IsBold=true;//粗体
style2.Borders[BorderType.LeftBorder].LineStyle=CellBorderType.Thin;
style2.Borders[BorderType.RightBorder].LineStyle=CellBorderType.Thin;
style2.Borders[BorderType.TopBorder].LineStyle=CellBorderType.Thin;
style2.Borders[BorderType.BottomBorder].LineStyle=CellBorderType.Thin;
//样式3
Stylestyle3=workbook.Styles[workbook.Styles.Add()];//新增样式
//style3.HorizontalAlignment=TextAlignmentType.Center;//文字居中
style3.Font.Name="宋体";//文字字体
style3.Font.Size=9;//文字大小
style3.Borders[BorderType.LeftBorder].LineStyle=CellBorderType.Thin;
style3.Borders[BorderType.RightBorder].LineStyle=CellBorderType.Thin;
style3.Borders[BorderType.TopBorder].LineStyle=CellBorderType.Thin;
style3.Borders[BorderType.BottomBorder].LineStyle=CellBorderType.Thin;
intColnum=dt.Columns.Count;//表格列数
intRownum=dt.Rows.Count;//表格行数
//生成行1列名行
for(inti=0;i<Colnum;i++)
{
cells[0,i].PutValue(dt.Columns[i].ColumnName);
cells[0,i].SetStyle(style2);
//cells.SetRowHeight(0,20);
}
//生成数据行
for(inti=0;i<Rownum;i++)
{
for(intk=0;k<Colnum;k++)
{
cells[1+i,k].PutValue(dt.Rows[i][k].ToString());
cells[1+i,k].SetStyle(style3);
}
//cells.SetRowHeight(1+i,20);
}
workbook.Save(path);
}