0

datagridview でページングを作成する必要があり、programCall.com でデモが正常に見つかりました。これがProgramCall.comのリンクです

以下は、ダウンロードしたデモ フォームのスクリーン ショットです。 ここに画像の説明を入力

ここで、このダウンロードしたコードを更新し、datagridview のゼロ (0) インデックスにチェック ボックス列を追加します。

以下のスクリーンショットが更新されます。 ここに画像の説明を入力

これが私の質問です。最初のページでチェックボックスをオンにしてから、2番目のページに移動して最初のページに戻った後、チェックしたチェックボックスがオフになっている場合、チェックされた状態を維持したいので、データグリッドビューのチェックボックスを維持するためのプロパティまたはメソッドがありますチェックされたステータスまたはその他。

以下に、更新されたコードを示します:-

Form1.cs:-

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;

namespace DatagridviewPagination
{
    public partial class Form1 : Form
    {

        private int CurrentPage = 1;
        int PagesCount = 1;
        int pageRows = 10;

        BindingList<Employee> Baselist = null;
        BindingList<Employee> Templist = null;


        public Form1()
        {
            InitializeComponent();
            DataGridViewCheckBoxColumn CheckboxColumn = new DataGridViewCheckBoxColumn();
            CheckboxColumn.TrueValue = true;
            dataGridView1.Columns.Add(CheckboxColumn);
            dataGridView1.Rows.Add(1);
            dataGridView1.Columns[0].HeaderText = "Select";
            dataGridView1.Columns[0].Width = 50;
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            Baselist = FillDataforGrid();
            PagesCount = Convert.ToInt32(Math.Ceiling(Baselist.Count * 1.0 / pageRows));

            CurrentPage = 1;
            RefreshPagination();
            RebindGridForPageChange();
        }

        //Method to generate temporary data
        private BindingList<Employee> FillDataforGrid()
        {
            BindingList<Employee> list = new BindingList<Employee>();
            for (int i = 1; i <= 20; i++)
            {
                Employee obj = new Employee(i, "ProgramCall.com" + i.ToString(), "Finance" + i.ToString());
                list.Add(obj);
            }

            return list;
        }


        private void RebindGridForPageChange()
        {
            //Rebinding the Datagridview with data
            int datasourcestartIndex = (CurrentPage - 1) * pageRows;
            Templist = new BindingList<Employee>();
            for (int i = datasourcestartIndex; i < datasourcestartIndex + pageRows; i++)
            {
                if (i >= Baselist.Count)
                    break;

                Templist.Add(Baselist[i]);
            }

            dataGridView1.DataSource = Templist;
            dataGridView1.Refresh();
        }

        //Method that handles the pagination button clicks
        private void ToolStripButtonClick(object sender, EventArgs e)
        {
            try
            {
                ToolStripButton ToolStripButton = ((ToolStripButton)sender);

                //Determining the current page
                if (ToolStripButton == btnBackward)
                    CurrentPage--;
                else if (ToolStripButton == btnForward)
                    CurrentPage++;
                else if (ToolStripButton == btnLast)
                    CurrentPage = PagesCount;
                else if (ToolStripButton == btnFirst)
                    CurrentPage = 1;
                else
                    CurrentPage = Convert.ToInt32(ToolStripButton.Text, CultureInfo.InvariantCulture);

                if (CurrentPage < 1)
                    CurrentPage = 1;
                else if (CurrentPage > PagesCount)
                    CurrentPage = PagesCount;

                //Rebind the Datagridview with the data.
                RebindGridForPageChange();

                //Change the pagiantions buttons according to page number
                RefreshPagination();
            }
            catch (Exception) { }
        }


        private void RefreshPagination()
        {
            ToolStripButton[] items = new ToolStripButton[] { toolStripButton1, toolStripButton2, toolStripButton3, toolStripButton4, toolStripButton5 };

            //pageStartIndex contains the first button number of pagination.
            int pageStartIndex = 1;

            if (PagesCount > 5 && CurrentPage > 2)
                pageStartIndex = CurrentPage - 2;

            if (PagesCount > 5 && CurrentPage > PagesCount - 2)
                pageStartIndex = PagesCount - 4;

            for (int i = pageStartIndex; i < pageStartIndex + 5; i++)
            {
                if (i > PagesCount)
                {
                    items[i - pageStartIndex].Visible = false;
                }
                else
                {
                    //Changing the page numbers
                    items[i - pageStartIndex].Text = i.ToString(CultureInfo.InvariantCulture);

                    //Setting the Appearance of the page number buttons
                    if (i == CurrentPage)
                    {
                        items[i - pageStartIndex].BackColor = Color.Black;
                        items[i - pageStartIndex].ForeColor = Color.White;
                    }
                    else
                    {
                        items[i - pageStartIndex].BackColor = Color.White;
                        items[i - pageStartIndex].ForeColor = Color.Black;
                    }
                }
            }

            //Enabling or Disalbing pagination first, last, previous , next buttons
            if (CurrentPage == 1)
                btnBackward.Enabled = btnFirst.Enabled = false;
            else
                btnBackward.Enabled = btnFirst.Enabled = true;

            if (CurrentPage == PagesCount)
                btnForward.Enabled = btnLast.Enabled = false;

            else
                btnForward.Enabled = btnLast.Enabled = true;
        }
    }
}

Employee.cs:-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DatagridviewPagination
{
    class Employee
    {

        public Employee(int empid, string empname, string empdept)
        {
            this.empId = empid;
            this.empName = empname;
            this.empDept = empdept;

        }
        private int empId;

        public int Empid
        {
            get { return empId; }
            set { empId = value; }
        }

        private string empName;

        public string EmpName
        {
            get { return empName; }
            set { empName = value; }
        }

        private string empDept;

        public string EmpDept
        {
            get { return empDept; }
            set { empDept = value; }
        }

    }
}

ありがとうございます!

4

1 に答える 1

1

チェックボックス列が動的で、モデルのプロパティにリンクされていないために発生しています。そのため、変更はページ間で保持されません。

従業員クラスにはプロパティが必要bool Checkedです。データグリッドは、このためのチェックボックス列を自動的に作成すると思います。そうでない場合は、チェックボックス列をこのプロパティにバインドする必要があります。

DataGridViewColumn.DataPropertyNameプロパティを使用して、列をモデル プロパティにリンクします。

于 2013-05-22T10:46:18.543 に答える