2017-10-28 127 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;並使用此數據表來提取數據。