一万行的数据,在客户端如何做到不分页能全部显示出来!
一万行的数据,在客户端如果不分页的话,用DataGrid等HTML类控件很难显示出来,即使能显示出来其网页也难以操作。
请问有什么好的方法以让客户端容纳这么大的数据量,如采用activeX控件等
另因是在内网,传输速度不成问题。
问题点数:200、回复次数:51Top
1 楼robertlvqing(苦海无边 回头无岸)回复于 2006-09-04 16:51:16 得分 5
不分页?why?
好像没什么好办法Top
2 楼gsk99(ZJUT)回复于 2006-09-04 16:53:04 得分 5
robertlvqing() ( ) 信誉:100 Blog 2006-09-04 16:51:00 得分: 0
不分页?why?
好像没什么好办法
-------------
9494Top
3 楼Avoid(好象又涨分了)回复于 2006-09-04 16:53:32 得分 5
就算是静态页面,一万行。。。你是用户你受的了?Top
4 楼fds2003(Hunter)回复于 2006-09-04 16:55:14 得分 5
不会分页?那么浏览器第一次绑定加载数据的岂不是慢长的等待?Top
5 楼wanghu830424(阿虎)回复于 2006-09-04 16:57:28 得分 5
写一个自定义控件.继承自datagrid,可以在里面加一个分隔条Top
6 楼nZAI(喃样)回复于 2006-09-04 16:58:14 得分 5
实际一点的话类似省市县下拉列表的AJAX联动,全国那么多县也是一个页面搞定,你说你网速不成问题的Top
7 楼anheizhizi(目标:★★★★★)回复于 2006-09-04 16:58:26 得分 5
先别管显示怎么样,让你去看一万行的表格你不眼晕?Top
8 楼bbla()回复于 2006-09-04 16:58:36 得分 5
用XML应该可以解决你的问题。
生成静态页面也应该可以。Top
9 楼Eddie005(♂) №.零零伍 (♂)回复于 2006-09-04 16:58:46 得分 5
<%@ Page language="c#" Codebehind="表头固定数据可拖动的DataGrid.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %>
<HTML>
<HEAD>
<title>ScrollGrid</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<style>
.fixedHeaderTr { POSITION: relative; ; TOP: expression(this.offsetParent.scrollTop) }
.mainDiv { SCROLLBAR-FACE-COLOR: #9999ff; OVERFLOW: auto; ; WIDTH: expression(document.body.clientWidth-100); ; HEIGHT: expression((document.body.clientHeight-this.offsetTop-80>this.children[0].offsetHeight)?(this.children[0].offsetHeight+80)/2 : (document.body.clientHeight-this.offsetTop-80)/2) }
</style>
</HEAD>
<BODY ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" cellSpacing="1"
cellPadding="1" width="98%" border="2">
<TR>
<TD colspan="3">↗ ↗ ↗ ↗ ↗
</TD>
</TR>
<TR>
<TD>左1</TD>
<TD><div class="mainDiv">
<asp:DataGrid id="DataGrid1" runat="server" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
BackColor="White" CellPadding="4" Width="100%">
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:DataGrid>
</div>
</TD>
<TD>右1</TD>
</TR>
<TR>
<TD>左2</TD>
<TD><div class="mainDiv">
<asp:DataGrid id="DataGrid2" runat="server" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
BackColor="White" CellPadding="4" Width="100%">
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:DataGrid>
</div>
</TD>
<TD>右2</TD>
</TR>
<TR>
<TD colspan="3">↘ ↘ ↘ ↘ ↘
</TD>
</TR>
</TABLE>
</form>
</BODY>
</HTML>
***********************************
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;
using System.Text.RegularExpressions;
namespace WebApplication1
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid2;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
DataBind1();
}
private void DataBind1()
{
DataTable dt1 = new DataTable();
dt1.Columns.Add("字段一");
dt1.Columns.Add("22222");
dt1.Columns.Add("33333");
dt1.Columns.Add("44444");
dt1.Columns.Add("55555");
dt1.Columns.Add("66666");
dt1.Columns.Add("77777");
dt1.Columns.Add("88888");
Random radm = new Random();
for(int i=1;i<50;i++)
{
dt1.Rows.Add(new object[]{i,(i+1)*(i+2),radm.Next(10000),i,(i+1)*(i+2),radm.Next(10000).ToString()+"iuweahgiwaefweiuyfg","--------------","-----------"});
}
this.DataGrid1.DataSource=dt1;
this.DataGrid1.DataBind();
// this.DataGrid2.DataSource=dt1;
// this.DataGrid2.DataBind();
}
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Header)
{
e.Item.Attributes.Add("class","fixedHeaderTr");
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.DataGrid2.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
Top
10 楼Eddie005(♂) №.零零伍 (♂)回复于 2006-09-04 17:01:02 得分 5
如果是内网,干脆C/S好了,何必非要用asp.net~ 还不分页~
activeX跟解决这个问题没有太大关系,反正数据都是一次传送到客户端~Top
11 楼wf5360308(冷月孤峰)回复于 2006-09-04 17:06:31 得分 5
一万行可是个大数目哦,即使IE能承受,用户能承受吗?Top
12 楼jedliu(21世纪什么最贵? 人才!)回复于 2006-09-04 17:07:20 得分 5
哪是一个崇拜了得!Top
13 楼windspeed(▁▂▄▅▆▇)回复于 2006-09-04 17:10:50 得分 5
呵呵 ,前台数据绑定
Top
14 楼jedliu(21世纪什么最贵? 人才!)回复于 2006-09-04 17:12:44 得分 5
或许你可以先加载1000行,加入DataGrid,随后再加其他的。这中间可以用时间器来控制,隔个几秒或几微秒!
或者就分为10个DataSet,将数据库中读出的数据分为10份放入,一个DataSet添满1000行后,赋给DataGrid,然后再添加其他DataSet,这样可以缓解赋值时带来的缓慢!让客户不至于等很久!Top
15 楼ustbwuyi()回复于 2006-09-04 17:13:32 得分 5
微软有个一拖到底的技术,就是往下拖多少就显示多少,分步显示的,
不过太难搞了
估计很难搞出来....Top
16 楼lubosun(大白菜)回复于 2006-09-04 17:16:06 得分 5
不分页,是不可想象的Top
17 楼luojianfeng(原来我不傻!)回复于 2006-09-04 17:27:53 得分 5
dingTop
18 楼iflang(踩姑娘的小蘑菇)回复于 2006-09-04 17:33:10 得分 5
一万行,,,不会页,,,会死人的......用户一定杀了你......Top
19 楼alien54155415()回复于 2006-09-04 17:35:55 得分 5
直接用response.write,五万笔的也就1,2十秒,就是格式没那么好看了Top
20 楼juedaihuaihuai(绝代坏坏(beyond myself))回复于 2006-09-04 17:36:34 得分 5
汗!!!!Top
21 楼iflang(踩姑娘的小蘑菇)回复于 2006-09-04 17:37:01 得分 5
LZ 醒醒吧.......就是1,2十秒也慢呀Top
22 楼shrinerain(圣影雨)回复于 2006-09-04 17:38:50 得分 5
为什么不能分页?有什么特殊需求吗?Top
23 楼artak(甜葡萄)回复于 2006-09-04 17:41:02 得分 5
用户1G内存,p43.0处理器,100M独享带宽,好爽,我想没有问题吧,呵呵,顶一下Top
24 楼aliketen(继续学习NET!)回复于 2006-09-04 17:53:37 得分 5
导出Excel慢慢看Top
25 楼sun2828(东方之星(为了爱我和我爱的人而奋斗!))回复于 2006-09-04 18:00:14 得分 5
一万的循环,楼主有库可以自己试试。直接循环写表格!while(dtr.Read()){<tr><td><%=dtr.GetValue(1) %></td></tr>}
大致是这样!自己写一段试试!Top
26 楼comerliang(天地良心)(性欲被自己倒分倒没了,以后再也不敢倒分了,想倒分的兄弟看看我的下场吧,男人没了性欲真不爽)回复于 2006-09-04 19:38:43 得分 5
谁会有时间看你那一万行数据?意义何在?Top
27 楼bzhi268(若路上遇到一位能敲透我心的MM,我一定带她游遍江南)回复于 2006-09-04 20:47:16 得分 5
打死我也一定要看LZ楼主做出来的效果Top
28 楼How_do()回复于 2006-09-04 21:30:57 得分 5
支持wanghu830424(阿虎)的做法,不过确实,老兄,一万行,用户真的会用吗?
用户自定义控件,继承GridView,应该可以的,不过速度也可想而知!Top
29 楼bobomouse(波波)回复于 2006-09-04 22:48:43 得分 5
用AJAX,异步加载数据Top
30 楼zhgroup(王员外)回复于 2006-09-05 07:57:07 得分 5
ajax处理,但是速度可能会非常慢。Top
31 楼firstrose(kots)回复于 2006-09-05 08:12:51 得分 5
按照Avoid说的,生成静态页面Top
32 楼lasker()回复于 2006-09-05 08:27:46 得分 2
我也想知道哟 CSDN的帖子好像就是不分页的? 就我们现在看的这个页面!!Top
33 楼dsclub(任搏软)回复于 2006-09-05 08:30:08 得分 4
不建议Ajax的,会使用户感觉死掉了。
我想先请教,1万行数据不分页的好处是什么?
如果是为了某种特殊的目的,那么看看是否有其他的办法来实现这个目的,何必非如此这样呢?Top
34 楼iuhxq(小灰)回复于 2006-09-05 08:35:52 得分 2
用户希望不分页,但你底层处理可以分页,否则一次1W条数据,估计浏览器也死掉了。Top
35 楼myminimouse(坚决不用baidu)回复于 2006-09-05 08:54:19 得分 2
heheTop
36 楼wshuangminlg(这里有你想要的 http://31767702.qzone.qq.com/)回复于 2006-09-05 09:10:11 得分 5
<%@ Page language="c#" Codebehind="表头固定数据可拖动的DataGrid.aspx.cs" AutoEventWireup="false" Inherits="WebApplication1.WebForm1" %>
<HTML>
<HEAD>
<title>ScrollGrid</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<style>
.fixedHeaderTr { POSITION: relative; ; TOP: expression(this.offsetParent.scrollTop) }
.mainDiv { SCROLLBAR-FACE-COLOR: #9999ff; OVERFLOW: auto; ; WIDTH: expression(document.body.clientWidth-100); ; HEIGHT: expression((document.body.clientHeight-this.offsetTop-80>this.children[0].offsetHeight)?(this.children[0].offsetHeight+80)/2 : (document.body.clientHeight-this.offsetTop-80)/2) }
</style>
</HEAD>
<BODY ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server">
<TABLE id="Table1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" cellSpacing="1"
cellPadding="1" width="98%" border="2">
<TR>
<TD colspan="3">↗ ↗ ↗ ↗ ↗
</TD>
</TR>
<TR>
<TD>左1</TD>
<TD><div class="mainDiv">
<asp:DataGrid id="DataGrid1" runat="server" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
BackColor="White" CellPadding="4" Width="100%">
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:DataGrid>
</div>
</TD>
<TD>右1</TD>
</TR>
<TR>
<TD>左2</TD>
<TD><div class="mainDiv">
<asp:DataGrid id="DataGrid2" runat="server" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
BackColor="White" CellPadding="4" Width="100%">
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:DataGrid>
</div>
</TD>
<TD>右2</TD>
</TR>
<TR>
<TD colspan="3">↘ ↘ ↘ ↘ ↘
</TD>
</TR>
</TABLE>
</form>
</BODY>
</HTML>
***********************************
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;
using System.Text.RegularExpressions;
namespace WebApplication1
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid2;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
DataBind1();
}
private void DataBind1()
{
DataTable dt1 = new DataTable();
dt1.Columns.Add("字段一");
dt1.Columns.Add("22222");
dt1.Columns.Add("33333");
dt1.Columns.Add("44444");
dt1.Columns.Add("55555");
dt1.Columns.Add("66666");
dt1.Columns.Add("77777");
dt1.Columns.Add("88888");
Random radm = new Random();
for(int i=1;i<50;i++)
{
dt1.Rows.Add(new object[]{i,(i+1)*(i+2),radm.Next(10000),i,(i+1)*(i+2),radm.Next(10000).ToString()+"iuweahgiwaefweiuyfg","--------------","-----------"});
}
this.DataGrid1.DataSource=dt1;
this.DataGrid1.DataBind();
// this.DataGrid2.DataSource=dt1;
// this.DataGrid2.DataBind();
}
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Header)
{
e.Item.Attributes.Add("class","fixedHeaderTr");
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.DataGrid2.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
Top
37 楼fallingstarNo1(啊龙)回复于 2006-09-05 09:14:39 得分 2
页面缓存,就是第一次打开时慢。Top
38 楼hanguoji84(北飘)回复于 2006-09-05 09:19:09 得分 2
直接填充DataGrid然后绑定,自动会缓存的,下次就快了,可是用户会很累的赫赫Top
39 楼stone3_hl(三块石头)回复于 2006-09-05 09:25:05 得分 2
你可以用一个报表控件,ITGrid很好用的。速度快,量大Top
40 楼lhy1204()回复于 2006-09-05 09:26:44 得分 2
JFTop
41 楼zhazhabird(喳喳)回复于 2006-09-05 09:31:59 得分 2
用excel阿
Response.ContentType ="application/vnd.ms-excel"Top
42 楼ruanbl(白菜西红柿)回复于 2006-09-05 09:41:37 得分 2
把每列都写在TABLE里
<tr><td>绑定</td><tr><br>
不知道浏览器能不能显示这么多呢Top
43 楼ruanbl(白菜西红柿)回复于 2006-09-05 09:42:31 得分 2
哦,页面加载的时候就绑数据Top
44 楼luck0235(风平浪静时人人都能掌舵)回复于 2006-09-05 09:57:23 得分 2
AJAX,比如刚打开显示100条,然后每三秒增加100条,就像Realplay缓冲一样,不用一下子打开一万条造成负荷瓶颈,而页面又不刷新,从效率和用户体验上都还是可行的。Top
45 楼isline(缘清)回复于 2006-09-05 10:00:11 得分 2
用iframe,每个iframe显示200条,50个iframe。Top
46 楼nickchai(菜虫)回复于 2006-09-05 10:04:22 得分 2
就算出来了...
1万行....客户端IE受的了? 就算出来了,谁看着不眼晕???Top
47 楼flyingbird110(看海的流星)回复于 2006-09-05 10:26:20 得分 2
一万行? 你作好了我去看看效果.. 一点人性都没有Top
48 楼limigy(learn...)回复于 2006-09-05 10:53:55 得分 2
客户不是人Top
49 楼wxlada(绿茶)回复于 2006-09-05 11:18:00 得分 2
一万行不分页总要有滚动条的吧。既然可以接受滚动条,那我们就自制一个滚动条好了。滚动条的作用是触发客户端的分页,这样问题解决了,唯一的麻烦在于自制滚动条滑条的拖动距离和长短的算法,如果你数据量是规定的话,就好办了,不固定的话,相信一个聪明的程序员是可以解决这个算法的。完工后,可以欣赏到其实分页但是看不出是分页的欺骗效果。
不过,有必要这么搞吗?用户比较BTTop
50 楼skystar99047(天星)回复于 2006-09-05 12:50:29 得分 2
用户这么变态吗,你就给他做个,然后让他慢慢等,慢慢看,过不一几天他就改变主意了。Top
51 楼Eleve(没头脑&不高兴)回复于 2006-09-05 12:50:47 得分 2
一万行不分页???要我是用户,我肯定会劈了你!Top




