DataGridView可以有最大大小吗?

时间:2017-05-02 07:04:01

标签: c# winforms datagridview

我在DataGridView内有一个Panel,所以我可以顺利滚动。

DataGridView将其高度设置为行的总高度。

我在DGV上有一个CellContentClick事件,它只在e.ColumnIndex == 0时作出反应。

目前我正在加载大约1700行。在关于第1489行(高度约为32569px)之后,这是我能够点击事件触发的最后一行。

[编辑] 2017年5月2日下午9:59 AU
添加代码以显示正在发生的事情。在表单中添加一个自定义面板(下面的代码),AutoScroll设置为true,然后放置一个DataBridView,滚动条设置为none。

小组类

    public class CustomPanel : System.Windows.Forms.Panel
    {
        protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl)
        {
            // Returning the current location prevents the panel from scrolling to the active control when the panel loses and regains focus
            return this.DisplayRectangle.Location;
        }
    }

数据类

    public class dgvRecord
    {
        public double ID { get; set; }
        public string TYPE { get; set; }
        public string NAME { get; set; }
        public DateTime DATE { get; set; }
        public dgvRecord() { }
    }

表单类

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace dgvInPanel
{
    public partial class Form1 : Form
    {
        List<dgvRecord> recList = new List<dgvRecord>();
        int normalRowHeight = 0;
        public Form1()
        {
            InitializeComponent();
            for (int rCount = 0; rCount < 1800; rCount++)
            {
                dgvRecord rec = new dgvRecord() { ID = 20170501000000, TYPE = "Asset", NAME = "Joe Bloggs", DATE = new DateTime(2017, 05, 02, 10, 30, 15) };
                recList.Add(rec);
            }
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            DataGridViewCellStyle imageCellStyle = new DataGridViewCellStyle();
            imageCellStyle.SelectionBackColor = dgv.DefaultCellStyle.BackColor;
            imageCellStyle.SelectionForeColor = dgv.DefaultCellStyle.ForeColor;
            imageCellStyle.Alignment = DataGridViewContentAlignment.TopCenter;
            DataGridViewCellStyle otherCellStyle = new DataGridViewCellStyle();
            otherCellStyle.Alignment = DataGridViewContentAlignment.TopLeft;

            dgv.AllowUserToResizeRows = false;
            dgv.AllowUserToAddRows = false;
            dgv.AllowUserToDeleteRows = false;
            dgv.ReadOnly = true;

            DataGridViewCell dgvc_ID = new DataGridViewTextBoxCell();
            DataGridViewTextBoxColumn dgvTbxCol_ID = new DataGridViewTextBoxColumn()
            {
                CellTemplate = dgvc_ID,
                Name = "ID",
                HeaderText = "ID",
                DataPropertyName = "ID",
                DefaultCellStyle = otherCellStyle,
            };
            dgv.Columns.Add(dgvTbxCol_ID);

            DataGridViewCell dgvc_TYPE = new DataGridViewTextBoxCell();
            DataGridViewTextBoxColumn dgvTbxCol_TYPE = new DataGridViewTextBoxColumn()
            {
                CellTemplate = dgvc_TYPE,
                Name = "TYPE",
                HeaderText = "Type",
                DataPropertyName = "TYPE",
                AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells,
                DefaultCellStyle = otherCellStyle,
            };
            dgv.Columns.Add(dgvTbxCol_TYPE);

            DataGridViewCell dgvc_R_NAME = new DataGridViewTextBoxCell();
            DataGridViewTextBoxColumn dgvTbxCol_R_NAME = new DataGridViewTextBoxColumn()
            {
                CellTemplate = dgvc_R_NAME,
                Name = "R_NAME",
                HeaderText = "Name",
                MinimumWidth = 110,
                DataPropertyName = "NAME",
                DefaultCellStyle = otherCellStyle,
            };
            dgv.Columns.Add(dgvTbxCol_R_NAME);

            DataGridViewCell dgvc_DATE = new DataGridViewTextBoxCell();
            DataGridViewTextBoxColumn dgvTbxCol_DATE = new DataGridViewTextBoxColumn()
            {
                CellTemplate = dgvc_DATE,
                Name = "DATE",
                HeaderText = "Date",
                MinimumWidth = 135,
                DataPropertyName = "DATE",
                DefaultCellStyle = otherCellStyle,
            };
            dgv.Columns.Add(dgvTbxCol_DATE);

            dgv.DataSource = recList;

            int dgvWidth = 0;
            int dgvHeight = 0;
            foreach (DataGridViewRow row in dgv.Rows)
            {
                if (dgvHeight == 0)
                {
                    normalRowHeight = row.Height;
                }
                dgvHeight += row.Height;
            }
            dgvWidth = pnlCust.Width - 17;
            dgv.Size = new Size(dgvWidth, dgvHeight);
            dgv.DataSource = recList;
        }
    }
}

如果你运行它,在顶部的某处单击一个单元格来选择内容,这应该没问题。

如果你走到最底层,尝试做同样的事情我发现它不允许选择,我发现在1489行附近的某个地方停止工作。 可能导致这种情况的原因是什么?

[EDIT2] 2017年5月3日上午8:00 AU 我将DGV放置在面板中的原因是为了平滑滚动。如果我可以在DGV上顺利滚动,我会使用它。

2 个答案:

答案 0 :(得分:1)

Datagridview.Rows.Count返回一个int值。所以最大可以是2147483647

答案 1 :(得分:0)

很长的DataGridViews没用。

我给你的建议,

[0-1000] - [1000-2000] - .....

使用上面的按钮。