DataSet&ListView分页和根据自己需要读取列数据,根据需要排列显示的位置或者可以说是顺序.[winform学习示例]
2011-11-26 21:54
525 查看
DataSet&ListView分页和根据自己需要读取列数据,根据需要排列显示的位置或者可以说是顺序.[winform学习示例]
为了ListView分页和有选择地排列数据列的位置(有时数据库列的位置与需要显示的位置排列不同或有些列不需要显示出来)在网络上找了一天时间,看了很多网页,看得我头痛眼睛累人烦,有的很粗略,有的过于冗长,有的看不懂,也说的不具体,令初学的人摸不着头脑;最终还是自己分析代码,终于找到了解决的方法,共享出来或许有人需要,可以参考和少走弯路。
网络上找到的ListView绑定数据库的例子:(如何连接数据库及把表读到DataSet就忽略了,以下代码是DataSet已经有数据的情况。)
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
string[] subitems = new string[?];//这个原来哪里找的现在找不到了!待找到改一下
object[] ? = row.ItemArray;
for (int i = 0; i < ?; i++)
{ subitems[i] = ?[i].ToString(); }
ListViewItem item = new ListViewItem(subitems);
ListView1.Items.Add(item);
}
我需要解决2个问题,下面分别阐述如何一步一步调试和修改.
1、根据自己需要读取列数据,根据需要排列显示的位置或者可以说是顺序,修改后的代码如下:
解决的方法就是去掉FOR循环,改为固定读取某列的数据,并按照自己需要安排排列顺序。
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;
subitems[0] = Han[6].ToString();//在
subitems[1] = Han[7].ToString();//这
subitems[2] = Han[1].ToString();//修
subitems[3] = Han[2].ToString();//改
ListViewItem item = new ListViewItem(subitems);
ListView1.Items.Add(item);
item.ImageIndex = 13;//添加图标
}
以上解决了第一个问题。
2、运行后发现显示数据比较慢,那么,首先想到的就是分页,网络上找一天茫然无绪,有一大堆网页,不是很长,就是寥寥几字,唉。。。。。。,有的说用SQL来实现,有的说改造ListView,还有的只说用bindingNavigator1和bindingSource1结合使用是个不错的,可结果都找不到例子来参考,最后只能放弃,想另外采取措施。
后来在不断思考和调试中发现,只有设定一定的条件限制就可以实现分页问题,于是,做如下修改:
int FenYe = 0;
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
FenYe++; //
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;
subitems[0] = Han[6].ToString();
subitems[1] = Han[7].ToString();
subitems[2] = Han[1].ToString();
subitems[3] = Han[2].ToString();
ListViewItem item = new ListViewItem(subitems);
if (FenYe >= 5)//这样前面的记录就不会显示了
{
ListView1.Items.Add(item);
item.ImageIndex = 13;
}
//控制行数达成分页
if (FenYe == 45) break;//后面的不再显示了
}
}
经过调试完成了对显示行数的控制,OK这样看来就能实现分页的目标了,那么,我从这里着手来实现分页设计了,添加1个标签控件用来显示一些与分页有关的文字,添加4个按钮分别用来控制首页尾页上页下页,添加一个用来控制每页显示几条记录的控件,好了,设计好的完整代码一并提供参考如下:
private void 列表(string GuanDong, bool Xz)
{
ListView1.Items.Clear(); ListView1.Columns.Clear();
ListViewItem SLieBiao = new ListViewItem();
SLieBiao.SubItems.Clear();
string[] BMing = new string[] { "xx", "xx", "xx", "xx", "xx", "xx", "xx", "xx", "xx", "xx", "xx",
"xx" };
int[] BKuan = new int[] { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
for (int Jj = 0; Jj < BMing.Length; Jj++)
{ ListView1.Columns.Add(BMing[Jj], BKuan[Jj], HorizontalAlignment.Center); }
ListView1.GridLines = true;
ListView1.View = View.Details;
ListView1.HeaderStyle = ColumnHeaderStyle.Clickable;
ListView1.FullRowSelect = true;
Hans = myDataSet.Tables[0].Rows.Count; Lies = myDataSet.Tables[0].Columns.Count;//改为公共变量
int FenYe = 0, FenYeKz = 0, TiaoSu = int.Parse(XianShiYeSu.Text), Gd = 0;
if (Xz) TiaoSu = int.Parse(GuanDong);
if (!Xz) Gd = int.Parse(GuanDong);
FenYeKz = Gd * TiaoSu;
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
FenYe++; if (FenYe <= FenYeKz) continue;/*因为上面的那个语句代码感觉设计比起来较麻烦,今天又看来一下书,如获至宝一样看到了这语句的用处,平时一般用不到,刚好在这里用得上,那么,采取这个措施后,下面的语句就不会执行,是不是节省计算机资源了?依理分析这样的控制可以应用在任何循环语句中从而达到控制目的,也就可以实现对数据行数的分页了*/
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;
subitems[0] = Han[6].ToString();
subitems[1] = Han[7].ToString();
subitems[2] = Han[1].ToString();
subitems[3] = Han[2].ToString();
ListViewItem item = new ListViewItem(subitems);
ListView1.Items.Add(item);
item.ImageIndex = 13;
if (FenYe == FenYeKz + TiaoSu) break;
}
int Qy = Hans % int.Parse(XianShiYeSu.Text); if (Qy != 0) Qy = 1;//对分页余数的处理
int Dqys = 0; if ((FenYe % TiaoSu) > 0) Dqys = 1;
ZongSu.Text = "总[" + Hans.ToString() + "]条记录;共" + ((Hans / TiaoSu) + Qy).ToString() + "页;
当前["
+ ((FenYe / TiaoSu) + Dqys).ToString() + "/" + ((Hans / TiaoSu) + Qy).ToString() +
"]页。";
}
}
private void XianShiYeSu_SelectedItemChanged(object sender, EventArgs e)//每页显示多少行数据控制
{ 列表(XianShiYeSu.Text, true); 列表("0", false);YeDao = 0; }
private void Sy_Click(object sender, EventArgs e)//首页按钮 YeDao 设为公共变量
{ 列表("0", false); YeDao = 0; MessageBox.Show("已到第一页", "有情提醒"); }
private void Syy_Click(object sender, EventArgs e)//上页按钮
{
if (YeDao > 0) { YeDao--; 列表((YeDao).ToString(), false); }
else MessageBox.Show("已到第一页", "有情提醒");
}
private void Xyy_Click(object sender, EventArgs e)//下页按钮
{
if (YeDao < (Hans / int.Parse(XianShiYeSu.Text)))
{ YeDao++; 列表((YeDao).ToString(), false); }
else MessageBox.Show("已到最后页", "有情提醒");
}
private void Wy_Click(object sender, EventArgs e)//尾页按钮
{
string Wsz = (Hans / int.Parse(XianShiYeSu.Text)).ToString();
YeDao = (Hans / int.Parse(XianShiYeSu.Text)) ;
列表(Wsz, false); MessageBox.Show("已到最后页", "有情提醒");
}
最后发现原来实现分页就这么简单,由于我测试的数据并不大于万,所以,感觉上分页显示不是原来的那么慢了,这种分页方式实际效果如何有待大家去测试,几下就搞定了烦恼的分页问题,一时高兴,忍不住要和大家分享,在这里只做抛砖引玉。
为了ListView分页和有选择地排列数据列的位置(有时数据库列的位置与需要显示的位置排列不同或有些列不需要显示出来)在网络上找了一天时间,看了很多网页,看得我头痛眼睛累人烦,有的很粗略,有的过于冗长,有的看不懂,也说的不具体,令初学的人摸不着头脑;最终还是自己分析代码,终于找到了解决的方法,共享出来或许有人需要,可以参考和少走弯路。
网络上找到的ListView绑定数据库的例子:(如何连接数据库及把表读到DataSet就忽略了,以下代码是DataSet已经有数据的情况。)
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
string[] subitems = new string[?];//这个原来哪里找的现在找不到了!待找到改一下
object[] ? = row.ItemArray;
for (int i = 0; i < ?; i++)
{ subitems[i] = ?[i].ToString(); }
ListViewItem item = new ListViewItem(subitems);
ListView1.Items.Add(item);
}
我需要解决2个问题,下面分别阐述如何一步一步调试和修改.
1、根据自己需要读取列数据,根据需要排列显示的位置或者可以说是顺序,修改后的代码如下:
解决的方法就是去掉FOR循环,改为固定读取某列的数据,并按照自己需要安排排列顺序。
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;
subitems[0] = Han[6].ToString();//在
subitems[1] = Han[7].ToString();//这
subitems[2] = Han[1].ToString();//修
subitems[3] = Han[2].ToString();//改
ListViewItem item = new ListViewItem(subitems);
ListView1.Items.Add(item);
item.ImageIndex = 13;//添加图标
}
以上解决了第一个问题。
2、运行后发现显示数据比较慢,那么,首先想到的就是分页,网络上找一天茫然无绪,有一大堆网页,不是很长,就是寥寥几字,唉。。。。。。,有的说用SQL来实现,有的说改造ListView,还有的只说用bindingNavigator1和bindingSource1结合使用是个不错的,可结果都找不到例子来参考,最后只能放弃,想另外采取措施。
后来在不断思考和调试中发现,只有设定一定的条件限制就可以实现分页问题,于是,做如下修改:
int FenYe = 0;
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
FenYe++; //
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;
subitems[0] = Han[6].ToString();
subitems[1] = Han[7].ToString();
subitems[2] = Han[1].ToString();
subitems[3] = Han[2].ToString();
ListViewItem item = new ListViewItem(subitems);
if (FenYe >= 5)//这样前面的记录就不会显示了
{
ListView1.Items.Add(item);
item.ImageIndex = 13;
}
//控制行数达成分页
if (FenYe == 45) break;//后面的不再显示了
}
}
经过调试完成了对显示行数的控制,OK这样看来就能实现分页的目标了,那么,我从这里着手来实现分页设计了,添加1个标签控件用来显示一些与分页有关的文字,添加4个按钮分别用来控制首页尾页上页下页,添加一个用来控制每页显示几条记录的控件,好了,设计好的完整代码一并提供参考如下:
private void 列表(string GuanDong, bool Xz)
{
ListView1.Items.Clear(); ListView1.Columns.Clear();
ListViewItem SLieBiao = new ListViewItem();
SLieBiao.SubItems.Clear();
string[] BMing = new string[] { "xx", "xx", "xx", "xx", "xx", "xx", "xx", "xx", "xx", "xx", "xx",
"xx" };
int[] BKuan = new int[] { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100 };
for (int Jj = 0; Jj < BMing.Length; Jj++)
{ ListView1.Columns.Add(BMing[Jj], BKuan[Jj], HorizontalAlignment.Center); }
ListView1.GridLines = true;
ListView1.View = View.Details;
ListView1.HeaderStyle = ColumnHeaderStyle.Clickable;
ListView1.FullRowSelect = true;
Hans = myDataSet.Tables[0].Rows.Count; Lies = myDataSet.Tables[0].Columns.Count;//改为公共变量
int FenYe = 0, FenYeKz = 0, TiaoSu = int.Parse(XianShiYeSu.Text), Gd = 0;
if (Xz) TiaoSu = int.Parse(GuanDong);
if (!Xz) Gd = int.Parse(GuanDong);
FenYeKz = Gd * TiaoSu;
DataTable dt = myDataSet.Tables[0];
foreach (DataRow row in dt.Rows)
{
FenYe++; if (FenYe <= FenYeKz) continue;/*因为上面的那个语句代码感觉设计比起来较麻烦,今天又看来一下书,如获至宝一样看到了这语句的用处,平时一般用不到,刚好在这里用得上,那么,采取这个措施后,下面的语句就不会执行,是不是节省计算机资源了?依理分析这样的控制可以应用在任何循环语句中从而达到控制目的,也就可以实现对数据行数的分页了*/
string[] subitems = new string[Lies];
object[] Han = row.ItemArray;
subitems[0] = Han[6].ToString();
subitems[1] = Han[7].ToString();
subitems[2] = Han[1].ToString();
subitems[3] = Han[2].ToString();
ListViewItem item = new ListViewItem(subitems);
ListView1.Items.Add(item);
item.ImageIndex = 13;
if (FenYe == FenYeKz + TiaoSu) break;
}
int Qy = Hans % int.Parse(XianShiYeSu.Text); if (Qy != 0) Qy = 1;//对分页余数的处理
int Dqys = 0; if ((FenYe % TiaoSu) > 0) Dqys = 1;
ZongSu.Text = "总[" + Hans.ToString() + "]条记录;共" + ((Hans / TiaoSu) + Qy).ToString() + "页;
当前["
+ ((FenYe / TiaoSu) + Dqys).ToString() + "/" + ((Hans / TiaoSu) + Qy).ToString() +
"]页。";
}
}
private void XianShiYeSu_SelectedItemChanged(object sender, EventArgs e)//每页显示多少行数据控制
{ 列表(XianShiYeSu.Text, true); 列表("0", false);YeDao = 0; }
private void Sy_Click(object sender, EventArgs e)//首页按钮 YeDao 设为公共变量
{ 列表("0", false); YeDao = 0; MessageBox.Show("已到第一页", "有情提醒"); }
private void Syy_Click(object sender, EventArgs e)//上页按钮
{
if (YeDao > 0) { YeDao--; 列表((YeDao).ToString(), false); }
else MessageBox.Show("已到第一页", "有情提醒");
}
private void Xyy_Click(object sender, EventArgs e)//下页按钮
{
if (YeDao < (Hans / int.Parse(XianShiYeSu.Text)))
{ YeDao++; 列表((YeDao).ToString(), false); }
else MessageBox.Show("已到最后页", "有情提醒");
}
private void Wy_Click(object sender, EventArgs e)//尾页按钮
{
string Wsz = (Hans / int.Parse(XianShiYeSu.Text)).ToString();
YeDao = (Hans / int.Parse(XianShiYeSu.Text)) ;
列表(Wsz, false); MessageBox.Show("已到最后页", "有情提醒");
}
最后发现原来实现分页就这么简单,由于我测试的数据并不大于万,所以,感觉上分页显示不是原来的那么慢了,这种分页方式实际效果如何有待大家去测试,几下就搞定了烦恼的分页问题,一时高兴,忍不住要和大家分享,在这里只做抛砖引玉。
相关文章推荐
- 根据ajax发送数据,从servelt中读取xml数据并显示,实现查询、删除和分页
- 交换数据学习一:将xml文本读取到DataSet并显示
- 今天学习了怎么读取Android数据库读取数据,用ListView将其显示出来
- 分组显示的ListView&分页加载数据
- PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
- 黑马程序员之WinForm编程基础学习笔记:用户在文本框1,2中输入两个数,点击按钮,在文本框3中显示从文本框1中的数字到文本框2中的数字之间的累加和。如果1或者2为错误的数据格式,则弹出对话框提示错
- DataSet&DataTable如何绑定下拉列表控件获取不重复的值,如何添加一列自定义文字,并在下拉列表控件中显示自定义文字[winform学习实例]
- c#实现根据网络IP显示地理位置功能示例
- android从服务器端读取图片和数据混合流并显示在listview
- 小黑小波比.根据数据加载的字段的值来显示指定<p></p>等控件
- Ajax读取数据之分页显示篇实现代码
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- WPF中在listview进行数据绑定,根据绑定数据调整一列的显示
- AJAX+JSP实现读取XML内容并按排列显示输出的方法示例
- Android数据的分页 listview显示数据
- Androidx学习笔记(35)---新闻客户端之ListView显示新闻内容&ViewHolder优化
- sql 数据显示的顺序,要根据WHERE中输入的条件顺序来显示
- 根据首字母的排列顺序对一组数据进行排序
- [学习小笔记] JSP分页显示数据
- ListView分页功能(3) 解决使用footerView数据不足,显示问题