2010-08-26 13 views
7

मैं एक datatable कुछ पंक्तियों के साथ प्रत्येक पंक्ति कुछ स्तंभ है।
मैं
इसलिए प्रत्येक सरणी आइटम की तरह इस {1;qwqww;qweqweqwe;qweqweqw;qwe}
स्ट्रिंग में आइटम ; साथ अलग हो जाएगा देखने के लिए एक ArrayList कि एक स्ट्रिंग के रूप में सभी पंक्ति countain बनाना चाहते हैं और यह एक नेट 2 समाधानसी #, डेटाटेबल के लिए डेटाटेबल?

है धन्यवाद

+0

सभी स्तंभों: यह एक कोड टुकड़ा है कि मैं एक datatable के लिए एक CSV लिखने के लिए इस्तेमाल करते हैं तार शामिल हैं? – thelost

+0

हाँ (एक बूलियन है), लेकिन यह के रूप में "सही" "गलत" –

+0

इस्तेमाल किया जाएगा [ऐसा मत करो!] (Http://stackoverflow.com/questions/434414/what-is-the-most-evil -code में आप-कभी देखा है में एक उत्पादन-उद्यम-वातावरण/434,562 # 434,562) –

उत्तर

10

यहाँ है एक समाधान जो वास्तव में काम करता है।

ArrayList rows = new ArrayList(); 

foreach (DataRow dataRow in myDataTable.Rows) 
    rows.Add(string.Join(";", dataRow.ItemArray.Select(item => item.ToString()))); 

हालांकि, मैं मैं कहना चाहिए कि यह अप्रचलित ArrayList उपयोग करने के लिए बुद्धिमानी नहीं है लग रहा है। बजाय List<string> का प्रयोग करें, के बाद से पंक्तियों तार कर रहे हैं:

List<string> rows = new List<string>(); 

कोड के बाकी ही है।

+1

धन्यवाद, लेकिन dataRow.ItemArray.Select (मद => item.ToString) मेरे लिए काम नहीं करता है! मैं नेट v2 उपयोग कर रहा हूँ वहाँ इसके साथ करने के लिए कोई बात है? –

+0

मुझे "प्रतीक का चयन नहीं कर सकता" प्राप्त करें !!! –

+0

@ डेटा-बेस: फ़ाइल के शीर्ष पर 'System.Linq;' का उपयोग करके जोड़ें। – Timwi

1

इसके बजाय एक ArrayList का उपयोग कर के मैं एक जोरदार टाइप किया संग्रह का उपयोग करके आप की सलाह देते हैं, क्योंकि एक ArrayList लिए एक गैर जोरदार तुलना में ज्यादा मूल्य लाने नहीं होगा DataTable टाइप किया जाएगा। अपने DataTable से अधिक

public class MyModel 
{ 
    public int Id { get; set; } 
    public string Prop1 { get; set; } 
    public string Prop2 { get; set; } 
} 

तो पाश और संग्रह को भरने:: तो आप एक मॉडल है कि प्रत्येक पंक्ति का प्रतिनिधित्व करेंगी को परिभाषित करते हुए शुरू कर सकता है

List<MyModel> models = new List<MyModel>(); 
foreach (DataRow row in dt.Rows) 
{ 
    MyModel model = new MyModel 
    { 
     Id = (int)row[0], 
     Prop1 = (string)row[1], 
     Prop2 = (string)row[2] 
    }; 
    models.Add(model); 
} 

या आप LINQ इस्तेमाल कर सकते हैं यदि आप पसंद:

List<MyModel> models = dt.Rows 
    .Cast<DataRow>() 
    .Select(row => new MyModel { 
     Id = (int)row[0], 
     Prop1 = (string)row[1], 
     Prop2 = (string)row[2] 
    }) 
    .ToList(); 
+0

अच्छा है, लेकिन क्या हुआ अगर datatable विविध में पंक्तियों और हमेशा नहीं था 3? – w69rdy

-2
ArrayList aList = new ArrayList(dt.Rows.Count); 
foreach (DataRow row in dt.Rows) 
{ 
    aList.Add(row); 
} 
+0

स्ट्रिंग में आइटम कैसे अलग किए जाएंगे? क्या यह "," या ";" है? –

+0

काम नहीं करता है, वह एक भी स्ट्रिंग, एक DataRow नहीं – w69rdy

+0

ओह .. मैं अपने प्रश्न में यह तथ्य याद के रूप में प्रत्येक सरणी आइटम चाहता है! –

1
ArrayList rows = new ArrayList(); 

foreach (DataRow dataRow in ((DataTable)dataGrid.DataSource).Rows) 
{ 
    rows.Add(String.Join(";", (string[])dataRow.ItemArray)); 
} 
+0

आपका मतलब है ";" और नहीं "," पंक्तियों में। जोड़ें (स्ट्रिंग। जॉइन (",", (स्ट्रिंग []) डेटारो.इटेमएरे)); ? –

+0

मुझे संदेह है कि 'स्ट्रिंग [] 'में कास्ट आम तौर पर विफल हो जाएगा। – Timwi

+0

@ डेटा बेस - हाँ, इसे ठीक किया गया, धन्यवाद! @Timwi - मैंने पूछा क्या सरणी आइटम प्रकार हो सकता है, ऐसा लगता है कि वह केवल उम्मीद की तरह स्ट्रिंग – thelost

0

यहाँ मेरी सिद्धांत है:

foreach (DataRow row in table.Rows) 
{ 
    for (int i = 0; i < table.Columns.Count; i++) 
    { 
     WriteItem(stream, row[i], quoteall); 
     if (i < table.Columns.Count - 1) 
      stream.Write(','); 
     else 
      stream.Write('\n'); 
    } 
} 

StringBuffer WriteItem के बजाय का उपयोग करें ... धारा आदि ...

+0

इसे ठीक करने के लिए धन्यवाद, मुझे पता चलेगा कि कोड को सही तरीके से कैसे रखा जाए – MikeAinOz