『壹』 數據表(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);
}