2011-04-07 65 views
5

Ben C# ile bir program yapıyorum ve içine bir datagridview bileşeni ekledim. Datagridview, iki ayrı diziye kaydetmek istediğim sabit miktarda sütun (2) içerir. Satırların miktarı olsa da değişiyor. Bunu nasıl yapabilirim?C# datagridview sütununa bir dizi içine

cevap

3

bu deneyin: dataGridView1 adında bir DataGridView varsayarsak

ArrayList col1Items = new ArrayList(); 
ArrayList col2Items = new ArrayList(); 

foreach(DataGridViewRow dr in dgv_Data.Rows) 
{ 
    col1Items.Add(dr.Cells[0].Value); 
    col2Items.Add(dr.Cells[1].Value); 
} 
+0

Jay'in kodunu kullanırken ilk hatayı aldıktan sonra, bunu denedim - ve aslında işe yaradı. Ancak, Jay'in daha verimli olduğunu söylerseniz, muhtemelen denemeye devam edeceğim! – Xedfire

11

ve sen, sen böyle bir şey yapabileceği dizeleri Diziler içine ilk iki sütun içeriğini kopyalamak istediğiniz:

string[] column0Array = new string[dataGridView1.Rows.Count]; 
string[] column1Array = new string[dataGridView1.Rows.Count]; 

int i = 0; 
foreach (DataGridViewRow row in dataGridView1.Rows) { 
    column0Array[i] = row.Cells[0].Value != null ? row.Cells[0].Value.ToString() : string.Empty; 
    column1Array[i] = row.Cells[1].Value != null ? row.Cells[1].Value.ToString() : string.Empty; 
    i++; 
} 
+0

+1, muhtemelen biraz daha verimli. –

+0

@AA elbette .NET 2.0+ kullanıyorsa, bir Array veya ArrayList yerine Liste kullanmanızı öneririz. –

+0

Benim tarafımdan doğru, ama koleksiyonunuzun uzunluğunu elden önce bildiğiniz takdirde, bir Array kullanmak için genellikle daha iyi/daha verimli olduğunu düşünüyorsanız (performans artışı göze çarpmayabilir). –

3

Jay'in örneğini kullandım ve tüm satırları kolay dışa aktarmak için tek bir dizide saklamak için değiştirdim. Kolayca [0,0] hücreden 0 dan dize almak için LogArray kullanabilirsiniz sonunda , kolon 0.

 // create array big enough for all the rows and columns in the grid 
     string[,] LogArray = new string[dataGridView1.Rows.Count, dataGridView1.Columns.Count]; 

     int i = 0; 
     int x = 0; 
     foreach (DataGridViewRow row in dataGridView1.Rows) 
     { 
      while (x < dataGridView1.Columns.Count) 
      { 
       LogArray[i, x] = row.Cells[x].Value != null ? row.Cells[x].Value.ToString() : string.Empty; 
       x++; 
      } 

      x = 0; 
      i++; //next row 
     } 

Ben bu birisiyle yardımcı umut, onun ilk kez çevrimiçi herhangi bir kod gönderme, hiç . Ayrıca tekrar başladığım çağlarda kodlamadım.