C# winform listview分页(sql分页)

自己正在做邮件系统遇到了的listview分页功能的问题,来和大家分享下,话不多说,直接贴代码

下面是界面代码,

namespace Erp.PDM.MulMail {     partial class TestPage     {         /// <summary>         /// Required designer variable.         /// </summary>         private System.ComponentModel.IContainer components = null;         /// <summary>         /// Clean up any resources being used.         /// </summary>         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>         protected override void Dispose(bool disposing)         {             if (disposing && (components != null))             {                 components.Dispose();             }             base.Dispose(disposing);         }         #region Windows Form Designer generated code         /// <summary>         /// Required method for Designer support - do not modify         /// the contents of this method with the code editor.         /// </summary>         private void InitializeComponent()         {             this.btnPrevPage = new System.Windows.Forms.Button();             this.btnNextPage = new System.Windows.Forms.Button();             this.listEmailUser = new System.Windows.Forms.ListView();             this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));             this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));             this.SuspendLayout();             //              // btnPrevPage             //              this.btnPrevPage.Location = new System.Drawing.Point(98, 281);             this.btnPrevPage.Name = "btnPrevPage";             this.btnPrevPage.Size = new System.Drawing.Size(75, 23);             this.btnPrevPage.TabIndex = 1;             this.btnPrevPage.Text = "上一页";             this.btnPrevPage.UseVisualStyleBackColor = true;             this.btnPrevPage.Click += new System.EventHandler(this.btnPrevPage_Click);             //              // btnNextPage             //              this.btnNextPage.Location = new System.Drawing.Point(208, 280);             this.btnNextPage.Name = "btnNextPage";             this.btnNextPage.Size = new System.Drawing.Size(75, 23);             this.btnNextPage.TabIndex = 2;             this.btnNextPage.Text = "下一页";             this.btnNextPage.UseVisualStyleBackColor = true;             this.btnNextPage.Click += new System.EventHandler(this.btnNextPage_Click);             //              // listEmailUser             //              this.listEmailUser.BackColor = System.Drawing.Color.White;             this.listEmailUser.BorderStyle = System.Windows.Forms.BorderStyle.None;             this.listEmailUser.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {             this.columnHeader1,             this.columnHeader2});             this.listEmailUser.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));             this.listEmailUser.Location = new System.Drawing.Point(98, 43);             this.listEmailUser.Name = "listEmailUser";             this.listEmailUser.Size = new System.Drawing.Size(185, 277);             this.listEmailUser.TabIndex = 8;             this.listEmailUser.UseCompatibleStateImageBehavior = false;             this.listEmailUser.View = System.Windows.Forms.View.Details;             //              // columnHeader1             //              this.columnHeader1.Text = "客户、同事名称或Email";             this.columnHeader1.Width = 260;             //              // columnHeader2             //              this.columnHeader2.Text = "id";             this.columnHeader2.Width = 50;             //              // TestPage             //              this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;             this.ClientSize = new System.Drawing.Size(421, 553);             this.Controls.Add(this.btnNextPage);             this.Controls.Add(this.btnPrevPage);             this.Controls.Add(this.listEmailUser);             this.Name = "TestPage";             this.Text = "TestPage";             this.Load += new System.EventHandler(this.TestPage_Load);             this.ResumeLayout(false);         }         #endregion         private System.Windows.Forms.Button btnPrevPage;         private System.Windows.Forms.Button btnNextPage;         private System.Windows.Forms.ListView listEmailUser;         private System.Windows.Forms.ColumnHeader columnHeader1;         private System.Windows.Forms.ColumnHeader columnHeader2;     } }

以下是后台代码,简单易懂,sql句的话自己改成自己的就好了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Erp.Library.Data.SqlClient;
using System.Text.RegularExpressions;



namespace Erp.PDM.MulMail
{
    public partial class TestPage : Form
    {
       string sql;
       int totalcount = 0;//记录总共的记录数
       static int page =0;   //记录现在翻到第几页了  
       public TestPage()
       {
           InitializeComponent();
       }

       private ListViewItem lvi = null;

       private void TestPage_Load(object sender, EventArgs e)
       {
           //窗体加载的时候,前5条记录是显示的。这时候,“下一页”是可用的,“上一页”是不可用的。
           string status = "3";
           int count1 = GetCount(status);
           if (count1 > 50)
           {
               btnNextPage.Enabled = true;
               btnPrevPage.Enabled = false;
           }
           else
           {
               btnNextPage.Enabled = false;
               btnNextPage.Enabled = false;
           }
           string count = "";
           using (DataAdapter da = new DataAdapter())
           {
               DataTable dt = new DataTable();
               sql = "SELECT top 50 linkman,customerno,[address],FAX,POSTCODE,COUNTRYID,PHONE,shortname,CompanyName , " +
                                  "(select name from  bas_customerstyle where id=style) as style," +
                                  "(select name from  bas_customerstatus where id=CustomerStatus ) as CustomerStatus," +
                                  "(select cnname  from bas_region where id=Regionid ) as Region," +
                                  "(select cnname from bas_country where id=Countryid ) as Country," +
                                  "(select cnname from bas_province where id=Provinceid ) as Province," +
                                  "(select name   from bas_customercredit where ID=CreditRateid) as CreditRate," +
                                  "(select name  from bas_sysstatus  where ID=sysstatus ) as sysstatus ," +
                                  "dbo.GetEmailAddress(a.id) as emailaddress ,(select COUNT(*) as ecount from E_EmailInfo where E_SendId =CAST(a.customerno as varchar(50))  and (E_ReplyId = '" + Erp.PDM.User.My.UID + "' or E_CCId = '" + Erp.PDM.User.My.UID + "') and IsRead = 'false' and SUBSTRING(E_EmailInfo.E_SendId,1,1) = 'C') as ecount" +
                                         " FROM crm_customer a where 1=1 and CustomerStatus ='" + status + "'" +
                                         " ORDER BY customerno";  //显示前50条信息        
               da.Text = sql;
               da.Fill(dt);
               for (int x = 0; x < dt.Rows.Count; x++)
               {
                   count = dt.Rows[x][17].ToString();
                   if (count == "0")
                       count = "";
                   else
                       count = "(" + count + ")";
                   string name = dt.Rows[x][0].ToString() + count;// + dt.Rows[x][16].ToString()
                   string emailAddress = dt.Rows[x][16].ToString();
                   if (name == "")
                   {
                       string[] emailList = Regex.Split(emailAddress, ",", RegexOptions.IgnoreCase);
                       string email = emailList[0];
                       lvi = new ListViewItem(email);
                   }
                   else
                       lvi = new ListViewItem(name);
                   for (int k = 1; k < dt.Columns.Count; k++)
                   {
                       lvi.SubItems.Add(dt.Rows[x][k].ToString());
                   }
                   this.listEmailUser.Items.Add(lvi);
               }
               this.listEmailUser.Items.Add("");
               this.listEmailUser.Items.Add("");
           }
       }

        /// <summary>
        /// 获取客户数量
        /// </summary>
       /// <param name="status">潜在客户、新客户、老客户</param>
        /// <returns></returns>
       private int GetCount(string status)
       {
           using (DataAdapter da = new DataAdapter())
           {
               DataTable dt = new DataTable();
               sql = "select count(customerno) from crm_customer where 1=1 and CustomerStatus ='" + status + "' ";
               da.Text = sql;
               da.Fill(dt);
               //查看一共有多少条记录。
               totalcount = Convert.ToInt32(dt.Rows[0][0].ToString());
           }
           return totalcount;
       }


       private void btnPrevPage_Click(object sender, EventArgs e)
       {
           //this.listEmailUser.Clear();
           string status = "3";
           //当点击下一页时,上一页是可用的。
           //btnPrevPage.Enabled = true;
           //记录有可能是被50整除的,有可能是不能被50整除,所以判断下一页是否可用需要分情况
           if (totalcount % 50 == 0)
           {
               if (page >= totalcount / 50 - 2)
               {
                   btnNextPage.Enabled = false;
                   btnPrevPage.Enabled = true;
               }
           }
           else
           {
               if (page >= totalcount / 50 - 1)
               {
                   btnNextPage.Enabled = false;
                   btnPrevPage.Enabled = true;
               }
           }
           page = page - 1;//上一页
           if (page <= 0)
           {
               btnNextPage.Enabled = true;
               btnPrevPage.Enabled = false;
           }
           listEmailUser.Items.Clear();//清空上一页的数据加载下一页的数据
           string count = "";
           using (DataAdapter da = new DataAdapter())
           {
               DataTable dt = new DataTable();
               sql = "SELECT top 50 linkman,customerno,[address],FAX,POSTCODE,COUNTRYID,PHONE,shortname,CompanyName , " +
                                  "(select name from  bas_customerstyle where id=style) as style," +
                                  "(select name from  bas_customerstatus where id=CustomerStatus ) as CustomerStatus," +
                                  "(select cnname  from bas_region where id=Regionid ) as Region," +
                                  "(select cnname from bas_country where id=Countryid ) as Country," +
                                  "(select cnname from bas_province where id=Provinceid ) as Province," +
                                  "(select name   from bas_customercredit where ID=CreditRateid) as CreditRate," +
                                  "(select name  from bas_sysstatus  where ID=sysstatus ) as sysstatus ," +
                                  "dbo.GetEmailAddress(a.id) as emailaddress ,(select COUNT(*) as ecount from E_EmailInfo where E_SendId =CAST(a.customerno as varchar(50))  and (E_ReplyId = '" + Erp.PDM.User.My.UID + "' or E_CCId = '" + Erp.PDM.User.My.UID + "') and IsRead = 'false' and SUBSTRING(E_EmailInfo.E_SendId,1,1) = 'C') as ecount" +
                                         " FROM crm_customer a where 1=1 and CustomerStatus ='" + status + "'" +
                                         " and id NOT IN (SELECT TOP " + page * 50 + " id FROM crm_customer ORDER BY customerno) ORDER BY customerno"; //显示前50条信息        


               da.Text = sql;
               da.Fill(dt);
               for (int x = 0; x < dt.Rows.Count; x++)
               {
                   count = dt.Rows[x][17].ToString();
                   if (count == "0")
                       count = "";
                   else
                       count = "(" + count + ")";
                   string name = dt.Rows[x][0].ToString() + count;
                   string emailAddress = dt.Rows[x][16].ToString();
                   if (name == "")
                   {
                       string[] emailList = Regex.Split(emailAddress, ",", RegexOptions.IgnoreCase);
                       string email = emailList[0];
                       lvi = new ListViewItem(email);
                   }
                   else
                       lvi = new ListViewItem(name);
                   for (int k = 1; k < dt.Columns.Count; k++)
                   {
                       lvi.SubItems.Add(dt.Rows[x][k].ToString());
                   }
                   
                   this.listEmailUser.Items.Add(lvi);
               }
               this.listEmailUser.Items.Add("");
               this.listEmailUser.Items.Add("");
           }
       }
       
        /// <summary>
        /// 下一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
       private void btnNextPage_Click(object sender, EventArgs e)
       {
           //this.listEmailUser.Clear();
           string status = "3";
           //当点击下一页时,上一页是可用的。
           btnPrevPage.Enabled = true;
           //记录有可能是被50整除的,有可能是不能被50整除,所以判断下一页是否可用需要分情况
           if (totalcount % 50 == 0)
           {
               if (page >= totalcount / 50 - 2)
               {
                   btnNextPage.Enabled = false;
                   btnPrevPage.Enabled = true;
               }
           }
           else
           {
               if (page >= totalcount / 50 - 1)
               {
                   btnNextPage.Enabled = false;
                   btnPrevPage.Enabled = true;
               }
           }
           page = page + 1;//下一页

           listEmailUser.Items.Clear();//清空上一页的数据加载下一页的数据
           string count = "";
           using (DataAdapter da = new DataAdapter())
           {
               DataTable dt = new DataTable();
               sql = "SELECT top 50 linkman,customerno,[address],FAX,POSTCODE,COUNTRYID,PHONE,shortname,CompanyName , " +
                                  "(select name from  bas_customerstyle where id=style) as style," +
                                  "(select name from  bas_customerstatus where id=CustomerStatus ) as CustomerStatus," +
                                  "(select cnname  from bas_region where id=Regionid ) as Region," +
                                  "(select cnname from bas_country where id=Countryid ) as Country," +
                                  "(select cnname from bas_province where id=Provinceid ) as Province," +
                                  "(select name   from bas_customercredit where ID=CreditRateid) as CreditRate," +
                                  "(select name  from bas_sysstatus  where ID=sysstatus ) as sysstatus ," +
                                  "dbo.GetEmailAddress(a.id) as emailaddress ,(select COUNT(*) as ecount from E_EmailInfo where E_SendId =CAST(a.customerno as varchar(50))  and (E_ReplyId = '" + Erp.PDM.User.My.UID + "' or E_CCId = '" + Erp.PDM.User.My.UID + "') and IsRead = 'false' and SUBSTRING(E_EmailInfo.E_SendId,1,1) = 'C') as ecount" +
                                         " FROM crm_customer a where 1=1 and CustomerStatus ='" + status + "'" +
                                         " and id NOT IN (SELECT TOP " + page * 50 + " id FROM crm_customer ORDER BY customerno) ORDER BY customerno"; //显示前50条信息        


               da.Text = sql;
               da.Fill(dt);
               for (int x = 0; x < dt.Rows.Count; x++)
               {
                   count = dt.Rows[x][17].ToString();
                   if (count == "0")
                       count = "";
                   else
                       count = "(" + count + ")";
                   string name = dt.Rows[x][0].ToString() + count;
                   string emailAddress = dt.Rows[x][16].ToString();
                   if (name == "")
                   {
                       string[] emailList = Regex.Split(emailAddress, ",", RegexOptions.IgnoreCase);
                       string email = emailList[0];
                       lvi = new ListViewItem(email);
                   }
                   else
                       lvi = new ListViewItem(name);
                   for (int k = 1; k < dt.Columns.Count; k++)
                   {
                       lvi.SubItems.Add(dt.Rows[x][k].ToString());
                   }
                   this.listEmailUser.Items.Add(lvi);
               }
               this.listEmailUser.Items.Add("");
               this.listEmailUser.Items.Add("");
           }
       }
    }
}




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值