2011-05-21 22 views
9

C# içinde bir DataTable'ı bir döngü kullanmadan güncelleştirin mi?

  • adı

  • renk

  • Ben kodu ve adını biliyorsanız, nasıl güncelleyebilirsiniz üç sütun benim DataTable

    1. kodunda vardır varsayalım Izin Kodu ve adı benim kriterlerimi karşılayan belirli satırın rengi? Bunu Loops! Kullanmadan yapmak istiyorum!

    +3

    Dünyada bunu neden döngüler kullanmadan yapmak istiyorsunuz? * Bir yerlerde *, bir döngü gerekli olacaktır. LINQ kullansanız bile, dahili olarak hala bir döngü gerçekleştirilir. –

    +0

    Cody, OP 1 satırı güncellemek istiyor. Bir sözlük bir döngü gerektirmez. –

    +0

    Bir tablo sözlük değil –

    cevap

    13

    Sen LINQ kullanabilirsiniz: Elbette

    DataRow dr = datatable.AsEnumerable().Where(r => ((string)r["code"]).Equals(someCode) && ((string)r["name"]).Equals(someName)).First(); 
    dr["color"] = someColor; 
    

    I varsayarak tüm bu kriterler dizelerdir. Oyuncuları doğru türlere göre değiştirmelisiniz.

    +0

    Şimdi Data.EnumerableRowCollection öğesinde hata alıyorum .First() Ayrıca, yalnızca bir satırı nasıl güncelliyoruz DataTable'da bu değişiklikleri yansıtacaktır –

    +0

    System.Linq' kullandığınızdan emin olun, ancak 'Where()' ya başvuruda bulunulmadıysa çalışmamalı. "Değişiklikleri yansıtır" ifadesini kullanarak mı görmek istiyorsunuz? Ekranda bunları görüntülemek için kullandığınız DataTable'ı yeniden bağlamanız gerekir – Farinha

    -1

    Sen yapabilirdi:

    foreach (DataRow row in datatable.Rows) 
         { 
          if(row["code"].ToString() == someCode && row["name"].ToString() == someName) 
    
           { 
            row["color"] = someColor; 
           } 
    
    
         } 
    
    +5

    -1 -> poster açıkça döngüler olmadan dedi. – lstanczyk

    +0

    -1 -> Posteri, döngüler kullanmamak için onun sorusunda belirtti. Bu çalışmaları anlıyorum, ancak bu soruların kriterlerini hali hazırda bırakıyor. – IyaTaisho

    12
    // Use the Select method to find all rows matching the name and code. 
    DataRow[] rows = myDataTable.Select("name 'nameValue' AND code = 'codeValue'); 
    
    for(int i = 0; i < rows.Length; i ++) 
    { 
         rows[i]["color"] = colorValue; 
    } 
    
    +0

    Bu güncelleştirilmiş satır myDataTable'a geri yansır (Commited) –

    +0

    @Zain: Bu zaten güncelleştirmeyi yapıyor. Belirli bir sırayı bulmak ve istenen sütunlara yeni değerler atamak için DataTable'ın Select yöntemini kullanın. Bu kadar. – CharithJ

    +0

    DataRow olmalı [] rows = myDataTable.Select ("name = 'nameValue' AND code = 'codeValue') – lstanczyk

    5
    DataTable recTable = new DataTable(); 
    
    // do stuff to populate table 
    
    recTable.Select(string.Format("[code] = '{0}' and [name] = '{1}'", someCode, someName)).ToList<DataRow>().ForEach(r => r["Color"] = colorValue); 
    
    +0

    Bu hala bir döngüdür. –

    İlgili konular