Я показываю многострочный текст в ячейке 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;
}
}
}