在我的应用程序中,我有一个DataGridView控件,显示所选对象的数据.当我选择一个不同的对象(在上面的组合框中)时,我需要更新网格.不幸的是,不同的对象具有完全不同的数据,甚至是不同的列,因此我需要清除所有现有数据和列,创建新列并添加所有行.当这样做时,整个控件可怕地闪烁,需要很长时间.是否有一种通用的方法来使控件处于更新状态,因此它不会重新绘制自身,然后在完成所有更新后重新绘制它?
TreeViews当然可以:
myTreeView.BeginUpdate();
try
{
//do the updates
}
finally
{
myTreeView.EndUpdate();
}
Run Code Online (Sandbox Code Playgroud)
是否有通用的方法与其他控件,特别是DataGridView一起执行此操作?
更新:对不起,我不确定我是否足够清楚.我看到"闪烁",因为在单次编辑后,控件在屏幕上重新绘制,因此您可以看到滚动条缩小等.
在我正在开发的应用程序中,我正在使用datagridview来显示数据.为了填充它,我要按一个按钮,后台工作人员将开始运行,它将填充一个数据表,当它完成运行时,它将使用数据表作为数据网格的数据源.这很好用,用户界面保持响应等等.但是现在我已经对行进行了着色,这取决于它们的值(我还在玩它,所以欢迎任何建议):
private void ApplyColoring()
{
if (dataGridView1.DataSource != null)
{
foreach (DataGridViewRow dataGridRow in dataGridView1.Rows)
{
// hardmap a color to a column
IDictionary<Int32, Color> colorDictionary = new Dictionary<Int32, Color>();
colorDictionary.Add( 7, Color.FromArgb(194, 235, 211));
colorDictionary.Add( 8, Color.Salmon);
colorDictionary.Add( 9, Color.LightBlue);
colorDictionary.Add(10, Color.LightYellow);
colorDictionary.Add(11, Color.LightGreen);
colorDictionary.Add(12, Color.LightCoral);
colorDictionary.Add(13, Color.Blue);
colorDictionary.Add(14, Color.Yellow);
colorDictionary.Add(15, Color.Green);
colorDictionary.Add(16, Color.White);
foreach (DataGridViewRow gridRow in dataGridView1.Rows)
{
foreach (DataGridViewCell cell in gridRow.Cells)
{
if (colorDictionary.Keys.Contains(cell.ColumnIndex))
{
// standard background
cell.Style.BackColor = Color.FromArgb(194, 235, 211);
}
} …Run Code Online (Sandbox Code Playgroud) 我在合理的时间内用C#刷新DataGridView时遇到麻烦(我是btw的新手,我习惯于Java ...)。
我正在通过每秒20个数据包发送的网络获取数据。我想解析数据并将其放在DataGridView中。我还想将DataGridView的更新间隔从0.1秒调整为1分钟。
因此,我创建了一个额外的线程,该线程读取程序包并将其解析为数组。我还有一个计时器,可用于更改时间间隔。在每个计时器刻度上,我都将数据源重新分配给DataGridView。
有趣的是,当我这样做时,即使我将计时器设置为0.1秒,也只会每秒触发一次。如果我不刷新DataGridView,它会被每秒触发10次,如预期的那样。
因此,我假设我的更新DataGridView的方法太耗时。但是,我必须做些什么才能使其更加高效,因此我可以每秒更新10次而没有任何问题?
这是我使用的代码:
public MyForm()
{
InitializeComponent();
timer = new System.Windows.Forms.Timer();
timer.Interval = (1 * 1000); // 1 secs
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
readNetworkValues = true;
networkReader = new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
byte[] data = new byte[1024];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 49003);
UdpClient newsock = new UdpClient(ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
while (readNetworkValues)
{
data = newsock.Receive(ref sender);
dataSet = parseData(data); //Decrypts the data
}
newsock.Close();
});
networkReader.Start();
} …Run Code Online (Sandbox Code Playgroud) 我有一个项目,我需要从数据库查看 Datagridview 中的数据,它应该看起来像甘特图。
我想让 Datagridview 看起来像这样:
我已经尝试了很多来自互联网的代码,但没有一个能正常工作
我也不知道如何将日期值放入单元格/行标题中
这就是我如何获取一个月中的天数
int year = DateTime.Now.Year;
int Jan = 1;
int daysInJan = System.DateTime.DaysInMonth(year, Jan);
Run Code Online (Sandbox Code Playgroud)