ایجاد Paging با استفاده از LINQ در #C

شنبه 22 مهر 1396

در این مقاله ما نحوه صفحه بندی در اپلیکیشن های دسکتاپ را با استفاده از LINQ و زبان برنامه نویسی #C را آموزش خواهیم داد. در مجموعه ای بزرگ از داده ها Paging یک روش مناسب برای پیدا کردن رکورد ها از یک لیست است.

ایجاد Paging با استفاده از LINQ در #C

پس با یک آموزش گام به گام برای صفحه بندی یک dataGridView با ما همراه باشید.

گام 1: Visual Studio خود را باز کرده و یک پروژه جدید ایجاد کنید.

گام 2: اکنون یک فرم جدید ایجاد و آن را به این شکل طراحی کنید.

گام 3: یک کلاس به نام SampleData.cs ایجاد کرده و کد زیر را وارد نمایید.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace ConsoleApplication1  
{  
    public class SampleData  
    {  
        public int ID;  
        public string Name;  
        public string Age;  
        public string Address;  
  
        public SampleData()  
        {  
        }  
    }  
}  

گام 4: کد زیر را در کلاس فرم خود وارد نمایید.

List<SampleData> _sampleDataList = new List<SampleData>();

گام 5: در زمان ایجاد constructor کد زیر را وارد نمایید.

        int currentPage = 0;
        int currentSize = 10;

        public SampleForm()
        {
            InitializeComponent();

            CreateDummy();        
            currentPage = 0;
            Paging(currentPage, currentSize);
        }

گام 6: اکنون توابع  زیر را اضافه کنید.

private void Paging(int pagenum, int pagesize)
        {

            if (currentPage < 0) { currentPage = 0; return; }

            flowLayoutPanel1.Controls.OfType<Label>().Where(e => e.Tag.ToString() != (pagenum + 1).ToString())
                .ToList().ForEach((element) =>
                {
                    element.ForeColor = Color.Black;
                });

            flowLayoutPanel1.Controls.OfType<Label>().Where(e => e.Tag.ToString() == (pagenum + 1).ToString())
                .First().ForeColor = Color.Red;



            textBox1.Text = " صفحه " + (pagenum + 1) + " از " + (int)(_sampleDataList.Count / pagesize);

            var products = from p in _sampleDataList.Skip(pagenum * pagesize).Take(pagesize)
                           select new { شناسه = p.ID, نام = p.Name, سن = p.Age, آدرس = p.Address };

            dataGridView1.DataSource = products.ToList();
        }
private void CreateDummy()
        {
            Enumerable.Range(1, 100).ToList().ForEach((element) =>
            {
                SampleData s = new SampleData();
                s.ID = element;
                s.Name = "نام کاربر" + element;
                s.Age = new Random().Next(10, 80).ToString();
                s.Address = "ایران";

                _sampleDataList.Add(s);
            });

            Enumerable.Range(1, (_sampleDataList.Count() / currentSize)).ToList().ForEach((element) =>
            {
                Label lbl = new System.Windows.Forms.Label();
                lbl.AutoSize = true;
                lbl.Location = new System.Drawing.Point(3, 0);
                lbl.Name = "lbl" + element;
                lbl.Size = new System.Drawing.Size(61, 13);
                lbl.Text = element.ToString();
                lbl.Tag = element;

                lbl.Click += new EventHandler(lbl_Click);

                this.flowLayoutPanel1.Controls.Add(lbl);
            });
        }

کد زیر برای کلیک روی شماره صفحه است.

void lbl_Click(object sender, EventArgs e)
        {

            flowLayoutPanel1.Controls.OfType<Label>().ToList().ForEach((element) =>
            {
                element.ForeColor = Color.Black;
            });

            Label lbl = (Label)sender;

            lbl.ForeColor = Color.Red;

            currentPage = int.Parse(lbl.Tag.ToString()) - 1;
            Paging(currentPage, currentSize);
        }

گام 7: کد زیر را در event مربوط به click کلید های 1، 2، 3 و 4 وارد کنید.

private void button1_Click(object sender, EventArgs e)
        {
            currentPage = 0;
            Paging(currentPage, currentSize);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            currentPage = (currentPage - currentSize) < 0 ? (currentPage - 1) : 0;
            Paging(currentPage, currentSize);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            currentPage = ((currentPage + 1) * currentSize) < _sampleDataList.Count() ?
                (currentPage + 1) : currentPage;
            Paging(currentPage, currentSize);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            currentPage = (_sampleDataList.Count() / currentSize) - 1;
            Paging(currentPage, currentSize);
        }

گام 8: اکنون پروژه خود را اجرا نمایید. نتیجه کار شما شبیه به تصویر زیر خواهد بود.

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 3k بازدید
  • 12 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید