2017-10-28 78 views
0

我从下面的代码中获得Datatable的不同值。这非常慢。凭借9000个独特的值,我在2分钟后停止了阅读。是否有可能做得更快?获取datagridview不同的列值

private void GetWaarde(string Veldnaam) 
     { 
      if (DatatabelExport.Rows.Count > 0) 
      { 
       Cursor.Current = Cursors.WaitCursor; 
       DataGridViewComboBoxColumn cb = (DataGridViewComboBoxColumn)dataGridView3.Columns["Waarde"]; 
       if (cb.Items.ToString() != "") //als veld Waarde al gevuld is dan niet opnieuw vullen 
       { 
        var x = (from r in DatatabelExport.AsEnumerable() 
          select r[dataGridView1.Columns[Veldnaam].Name]).Distinct().ToList(); 

        for (int i = 0; i < x.Count - 1; i++) 
        { 
         cb.Items.Add(x[i].ToString()); 
        } 
       } 
       cb.Dispose(); 
       Cursor.Current = Cursors.Default; 
      } 
     } 
+0

首先我会重新考虑UI设计。没有用户愿意享受面对9000个项目的CBO。来自DGV数据源的第二部作品(datatable?)。第三,不是逐个添加项目,而是使用AddRange或者甚至更好地将您的列表用作数据源。第四,哪一部分占用最多的时间?使用类似的代码我可以在4或5秒内从数据表中获得20000个唯一值(ID) – Plutonix

+0

代码的耗时部分不会从数据表获取唯一值。这是您将项目添加到组合框的部分。要查看解决方案,请查看[此帖子](https://stackoverflow.com/a/39338415/3110834)。 –

+0

我注意到您在以前的问题中没有接受过任何答案,也没有投过票。请参加[参观]并了解如何接受并提出答案,并对以前的问题进行审核,并接受并提出好的答案。 –

回答

0

首先使用.DataSource其转换为的DataTable;并使用此数据表来提取数据。