由于我的问题最近2次未得到回答,因此我将重试: 我在usercontrol上有2个gridviews.当我将数据表(具有80列/100行的DataTable _AllData)绑定到第一个网格时,它需要10毫秒.但是当我创建一个有1个空行的数据表并将其绑定到第二个网格时,它需要180毫秒,这太长了. 我的代码:
As my question was not answered the last 2 times I''ll try again: I have 2 gridviews on a usercontrol. When I bind a datatable (DataTable _AllData with 80 columns/ 100 rows) to the first grid it takes 10 ms. But when i create a datatable with 1 empty row and bind it to the second grid it takes 180 ms, which is too long. My code:
stopWatch = new Stopwatch(); stopWatch.Start(); // Create a datatable for the header with empty strings DataTable header = new DataTable("FilterRow"); // Add all columns of the datasource to it foreach (DataColumn col in _AllData.Columns) { header.Columns.Add(new DataColumn(col.ColumnName, typeof(string))); } stopWatch.Stop(); TimeSpan s3 = stopWatch.Elapsed; // ===> 0.0966 stopWatch = new Stopwatch(); stopWatch.Start(); // Create a empty row for it DataRow filterrow = header.NewRow(); foreach (FilterColumnClass filter in _FilterColumns) // While testing the timings this contained 80 columns { if (filter.FilterCheckControl.Visible) { try { filterrow.ItemArray[filter.Index] = filter.FilterTextString; // While testing the timings all these variables where empty } catch (Exception ex) { PublicFunctions.ReportBug(ex, _Shared); } } } // Add the filter row to the header datatable header.Rows.Add(filterrow); stopWatch.Stop(); TimeSpan s4 = stopWatch.Elapsed; // ===> 0.1811 ms stopWatch = new Stopwatch(); stopWatch.Start(); // Assign the header datatable to the grid gridHeader.DataSource = header; stopWatch.Stop(); TimeSpan s5 = stopWatch.Elapsed; // ===> 165.3965 ms WHY?????? MessageBox.Show( "PrepareFilterColumns" + Environment.NewLine + "#1-2#: " + s1.TotalMilliseconds.ToString() + Environment.NewLine + "#2-3#: " + s2.TotalMilliseconds.ToString() + Environment.NewLine + "#3-4#: " + s3.TotalMilliseconds.ToString() + Environment.NewLine + "#4-5#: " + s4.TotalMilliseconds.ToString() + Environment.NewLine + "#5-6#: " + s5.TotalMilliseconds.ToString() + Environment.NewLine);推荐答案
不要使用DateTime类进行计时:它的辨别力太差了. 而是使用 Stopwatch类 [ ^ ]:它更适合于此,并具有更好的分辨率.您可能会发现现有的时机已经远远超过了! Don''t use the DateTime class for timing: it''s discrimination is way too poor. Instead, do your timings with the Stopwatch class[^]: it is much more suited to this, and has a lot better resolution. You may find your existing timings are miles out!
我找到了解决方案!!! 将数据表数据绑定到网格的速度如此之慢的主要原因是,列名的绘制花费了大量时间.简单的代码行: I''VE FOUND THE SOLUTION!!!! The main reason that databinding a datatable to a grid is so slow is because the drawing of the columnnames takes alot time. The simple line of code: gridHeader.ColumnHeadersVisible = false;
将数据绑定过程从 180-300毫秒加快到 4毫秒 !!! 现在这可能不是一个很好的解决方案,因为表列对于显示数据非常重要,但是对我来说这不是问题,因为我已经创建了一些自定义控件,这些控件放置在列名上.因此,通过禁用列名,我自己的column-name-controls仍然存在,并为用户提供了有关哪一列是什么的见识.
Speeds up the databinding process from 180-300 ms to 4 ms!!! Now this might not be a good solution for you because the tablecolumns are quite important for the showing of data, but for me it''s not a problem as I already create some custom controls that I place over the column names. So by disabling the column names, my own column-name-controls remain present and give the user insight in which column is what.
更多推荐
空数据表的数据绑定速度慢
发布评论