我目前遇到以下问题: 我有一个 DataGridView,它由后台运行的 Task 填充。任务完成后,滚动条和单元格在 DataGridView 中无法以某种方式正确显示...将对话框大小调整为全屏模式(最大化)后,滚动条正确显示...每当调整大小以其他方式完成时(最小化),滚动条再次失败......这里有什么想法吗?我可以从任务中触发任何刷新事件来重新调整滚动条和单元格吗?
**附加信息:** DataGridView 通过 Dock = Fill 打包到 TableLayoutPanel 上。
编辑: 数据加载是通过
完成的private void TryLoadData()
{
try
{
LoadData();
}
catch (Exception ex)
{
//Just some error logging
_log.Error(ex);
_errorHandler.Show(ex);
}
}
private void LoadData()
{
ClearRows();
//Loading from database
var data = _databaseAdapter.Get<Data, bool>(x => !x.Deleted);
foreach (var singleDatum in data)
LoadDataRowToDataGridView (singleDatum);
}
private void ClearRows()
{
this.UiThreadInvoke(() => { DataGridView.Rows.Clear(); });
}
private void LoadDataRowToDataGridView(Data singleDatum)
{
this.UiThreadInvoke(() => { DataGridView.Rows.Add(singleDatum.Id, singleDatum.Name); });
}
开始于:
new Task(TryLoadData).Start();
UiThreadInvoke:
using System;
using System.Windows.Forms;
namespace UIExtensions
{
public static class UiThreadInvokeExtension
{
public static void UiThread(this Control control, Action code)
{
if (control.InvokeRequired)
{
control.BeginInvoke(code);
return;
}
code.Invoke();
}
public static void UiThreadInvoke(this Control control, Action code)
{
if (control.InvokeRequired)
{
control.Invoke(code);
return;
}
code.Invoke();
}
}
}
试试这些
1。设置这些属性
ContactsDataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
ContactsDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
2。像这样插入
ContactsDataGridView.Invoke(new Action(() =>
{
ContactsDataGridView.Rows.Add(kvp.Key, kvp.Value, new DataGridViewButtonCell(), new DataGridViewButtonCell());
}));
当您调整屏幕大小时,应用程序会重新绘制并渲染窗口。尝试在加载数据时强制渲染网格。
datagridview1.update(); datagridview1.refresh();
我发现这正在寻找解决我的类似问题的方法,我从后台线程将网格加载到 TabPage 上,该后台线程将通过 grid.Invoke 设置网格的数据源。如果加载发生在页面尚未显示时,则当我选择该页面时滚动条不会显示,直到我最小化/最大化表单。对我来说,我可以通过订阅 TabPage Enter 事件来解决这个问题;然后我调用了 SuspendLayout(),然后调用了 ResumeLayout(),滚动条出现了。我在尝试其他各种方法来补救时偶然发现了这一点。 Refresh() 和 Invalidate() 对我不起作用。