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