C# 我想在Datagridview上使用双缓冲方法,使滚动更加平滑

C# 我想在Datagridview上使用双缓冲方法,使滚动更加平滑,c#,winforms,datagridview,C#,Winforms,Datagridview,我试图让我的datagridview在滚动时看起来更好,因为它看起来像是我在使用2000年或更糟的电脑。在搜索过程中,我发现了一种双缓冲的方法,每个人都说它能让事情变得更好 当我使用它时,dataGridView2.DoubleBuffered(true)行变为红色,并显示错误消息:CS1955 C#非invocable成员不能像方法一样使用。无法在此访问受保护的属性“DoubleBuffered” 如果你不能帮我解决这个错误,也许可以告诉我一种使滚动更平滑的方法 using System.Wi

我试图让我的datagridview在滚动时看起来更好,因为它看起来像是我在使用2000年或更糟的电脑。在搜索过程中,我发现了一种双缓冲的方法,每个人都说它能让事情变得更好

当我使用它时,dataGridView2.DoubleBuffered(true)行变为红色,并显示错误消息:CS1955 C#非invocable成员不能像方法一样使用。无法在此访问受保护的属性“DoubleBuffered”

如果你不能帮我解决这个错误,也许可以告诉我一种使滚动更平滑的方法

using System.Windows.Forms;
using System.Data.OleDb;
using System.Reflection;

namespace WarehouseManagementToolv1
{
    public partial class OrdersForm : Form
    {

        public SecondaryCallDB.GetDatabase _GetDatabase;
        private OleDbConnection connection = new OleDbConnection();

        public OrdersForm()
        {
            InitializeComponent(); 
            _GetDatabase = new SecondaryCallDB.GetDatabase();
        }

        private void btnLoadTable_Click_1(object sender, EventArgs e)
        {
            dataGridView2.DataSource = _GetDatabase.GetFullOrderDatabase();
            dataGridView2.DoubleBuffered(true);
        }

        public void DoubleBuffered(DataGridView dgv, bool setting)
        {
            Type dgvType = dgv.GetType();
            PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
                BindingFlags.Instance | BindingFlags.NonPublic);
            pi.SetValue(dgv, setting, null);
        }
    }
}

您应该将此方法放置在静态类中,并通过执行以下操作将其转换为扩展方法

public static void DoubleBuffered(this DataGridView dgv, bool setting)
        {
            Type dgvType = dgv.GetType();
            PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
                BindingFlags.Instance | BindingFlags.NonPublic);
            pi.SetValue(dgv, setting, null);
        }
或者您应该像调用普通方法一样调用该方法

DoubleBuffered(dataGridView2, true)

您可能是指
双缓冲(dataGridView2,true)
。它不是扩展方法。
DoubleBuffered
是窗体属性的名称。可能会将方法名称更改为,例如,
SetDoubleBuffered
。您应该真正删除以下内容:
private-OleDbConnection-connection=new-OleDbConnection()。如果需要打开连接,请将其打开并就地处理。不要试图缓存它。当您使用连接对象作为字段时,您对良好的性能没有任何希望。然后,请确保没有任何单元格格式化过程循环DGV数据源的全部内容。正确使用适当的事件(
CellFormatting
RowPrePaint
等)。。我只是叫错了,谢谢!现在很好用!