Вертикальная прокрутка DataGridView слишком медленная в WrapMode + AutoSizeRowsMode - PullRequest
0 голосов
/ 03 августа 2020

Я показываю многострочный текст в ячейке DataGridView. Чтобы показать многострочный текст, мне нужно установить WrapMode = true и AutoSizeRowsMode = allcells. Если AutoSizeRowsMode = none, я не могу использовать его, потому что все содержимое не отображается, а отображается только его часть.

Однако настройка wrapmode = true и AutoSizeRowsMode =allcells слишком медленная для вертикальной прокрутки с помощью мыши рулевое колесо. Я хочу быстро и естественно выполнять вертикальную прокрутку.

Могу я попросить совета?

Файл проекта https://drive.google.com/file/d/14GiIfTO8625NHrDWRs3wxznj2cVJmBFJ/view?usp=sharing

using System;
using System.Data;
using System.Windows.Forms;

namespace test_dataGridView
{
    public partial class Form1 : Form
    {
        private DataTable tb;
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
        private const int WM_SETREDRAW = 0x000B;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            tb = new DataTable("itemTable");
            DataColumn[] cols ={
                                  new DataColumn("No",typeof(String)),
                                  new DataColumn("Contents",typeof(String))
                              };
            tb.Columns.AddRange(cols);

            string contents = String.Empty;
            for (int i = 1; i <= 50; i++)
                contents += "Why Vertical Scroll lagging in wrapmode true? ";

            for (int i = 1; i <= 200; i++)
            {
                DataRow row = tb.NewRow();
                row["No"] = i.ToString();
                row["Contents"] = "★★★★★" +  contents;
                tb.Rows.Add(row);
            }
            
            

            dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
            dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
            dataGridView1.ColumnHeadersHeight = 30;
            dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dataGridView1.RowHeadersVisible = false;

            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.AllowUserToDeleteRows = false;
            dataGridView1.AllowUserToResizeRows = false;
            dataGridView1.AllowUserToResizeColumns = false;
            dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;

            SendMessage(dataGridView1.Handle, WM_SETREDRAW, false, 0);

            dataGridView1.DataSource = tb;

            dataGridView1.Columns["Contents"].Width = 650; //Contents
            dataGridView1.Columns["Contents"].DefaultCellStyle.WrapMode = DataGridViewTriState.True; // *****
            dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; //*****
            dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); //****

            SendMessage(dataGridView1.Handle, WM_SETREDRAW, true, 0);
        }
    }
    public class DataGridViewDoubleBuffered : DataGridView
    {
        public DataGridViewDoubleBuffered()
        {
            DoubleBuffered = true;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...