我目前看到以下问题: 我有一个DataGridView,由后台运行的任务填充。任务完成后,DataGridView中的滚动条和单元格无法正确显示...在将对话框调整为全屏模式(最大化)后,滚动条会正确显示...每当调整大小时以其他方式完成(最小化),滚动条再次失败......这里有什么想法吗?是否有任何刷新事件我可以从任务中触发重新调整滚动条和单元格?
**附加信息:**使用Dock = Fill将DataGridView打包到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();
}
}
}
答案 0 :(得分:2)
试试这些
<强> 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());
}));
答案 1 :(得分:0)
当您调整屏幕大小时,应用程序会重新绘制并渲染窗口。尝试在加载数据时强制渲染网格。
datagridview1.update(); datagridview1.refresh();