2012-01-31 15 views
8

उदाहरण के लिए:संग्रह इनलाइन कैसे सेट करें?

DataTable table = new DataTable() 
{ 
    Columns = new DataColumnCollection(
    { 
     new DataColumn("col1"), 
     new DataColumn("col2") 
    }) 
}); 
+0

यह बहुत अधिक वीएस/नेट के संस्करण पर निर्भर करता है जिसका आप उपयोग कर रहे हैं। –

+1

मैंने टैग अपडेट किए। –

उत्तर

10

आप Collection Initialiser सुविधा # 3 सी में जोड़ा बारे में बात कर रहे हैं।ऐसा इस तरह किया जाता है:

DataTable table = new DataTable() 
{ 
    Columns = 
    { 
     new DataColumn("col1"), 
     new DataColumn("col2") 
    } 
}; 

यह संग्रह संग्रहकर्ता को कॉल नहीं करता है, यह संग्रह का उपयोग करता है जो डेटाटेबल में पहले से मौजूद है।

कॉलम के लिए यह छोटा हाथ है। जोड़ें(), इसलिए कॉलम के लिए एक सेटटर की आवश्यकता नहीं है।

आप अपने प्रश्न में कोड के साथ बहुत करीब थे!

+0

बीए-यू-टीआई-फुल! अच्छा है। –

2

आप शायद DataColumnCollection लिए चारों ओर है कि संग्रह प्रारंभकर्ता paretheses हटाने, और बेजोड़ हटाने की जरूरत, अंतिम )

उन वाक्य मुद्दे हैं, हालांकि। अंतर्निहित समस्याएं हैं कि Columns संपत्ति में कोई सेटटर नहीं है, और DataColumnCollection में कोई सार्वजनिक निर्माता नहीं है।

असल में, आपको तुरंत चालू करना होगा और फिर .Columns.Add() पर कॉल करना होगा।

यह कुछ आप अपने कोड में एक बहुत करते हैं, आप सहायक वर्गों है कि आप दोस्ताना वाक्य रचना देना होगा बना सकते है यह है:

DataTable table = DataTableFactory.CreateTableWithColumns("col1", "col2"); 
+0

मैंने ऐसा करने का प्रयास किया। यहां तक ​​कि यदि वह वाक्यविन्यास त्रुटि को सही करता है तो उसे यह भी कहने में त्रुटि होगी कि ** कॉलम ** केवल पढ़ने वाली संपत्ति है। –

+0

@Jay - अच्छा विचार +1 –

3

Columns संपत्ति ताकि आप केवल संशोधित कर सकते हैं एक सेटर नहीं है यह।

इस बारे में कैसे:

DataTable table = new DataTable(); 
table.Columns.AddRange(new[] { new DataColumn("col1"), new DataColumn("col2") }); 

आप एक लैम्ब्डा में एक बयान के साथ क्या करना चाहते हैं:

DataTable table = (() => { 
    var table = new DataTable(); 
    table.Columns.AddRange(new[] { new DataColumn("col1"), 
            new DataColumn("col2") }); 
    return table;})(); 
+0

मैं इसे सभी इनलाइन करना चाहता हूं। मैंने सोचा कि यह() => या कुछ का उपयोग कर संभव था। –

+0

आप मेरे उत्तर में दिए गए कारणों के लिए इनलाइन नहीं कर सकते हैं। यदि आप कोड को साफ रखना चाहते हैं तो आप तालिका बनाने के लिए एक एक्सटेंशन विधि बना सकते हैं और कॉलम को एक चरण में जोड़ सकते हैं, लेकिन किसी बिंदु पर यह कोड की कम से कम दो पंक्तियां होगी। –

+0

यदि यह एक सेटटर था, तो यह कैसे किया जाएगा? क्या आप कृपया एक कामकाजी उदाहरण प्रदान कर सकते हैं? –

1

वर्ग DataColumnCollection तो आप मैन्युअल रूप से एक उदाहरण नहीं बना पा रहा कोई निर्माता है। संकलक के त्रुटि संदेश सुंदर आत्म व्याख्यात्मक होना चाहिए, की तर्ज पर कुछ कह रही:

प्रकार 'System.Data.DataColumnCollection' नहीं कंस्ट्रक्टर्स परिभाषित किया गया है

आप DataTable.Columns कॉलम शामिल कर सकते Add() विधि का उपयोग कर संग्रह:

DataTable table = new DataTable(); 
table.Columns.Add(new DataColumn("col1")); 
table.Columns.Add(new DataColumn("col2")); 
1

आपको लगता है कि सिंटैक्स का उपयोग नहीं कर सकते हैं के रूप में कॉलम संपत्ति केवल पढ़ने के लिए है। मैं गेबे द्वारा सुझाई गई तकनीक का उपयोग करूंगा।

2

वहाँ 2 कारणों क्यों यह काम नहीं करेगा कर रहे हैं:

1) Columns संपत्ति केवल पढ़ने के लिए है 2) DataColumnCollection वर्ग एक निर्माता है कि यह प्रारंभ करने में स्तंभों का एक संग्रह को स्वीकार करता है नहीं है।

DataTable table = new DataTable(); 
table.Columns.AddRange(new [] 
    { 
     new DataColumn("col1"), 
     new DataColumn("col2") 
    }); 

अपने अन्य सवाल का जवाब करने के लिए, यदिColumns एक सेटर और यदिDataColumnCollection स्वीकार कर लिया कॉलम इसके निर्माता में था:
बेस्ट आप कर सकते हैं एक पंक्ति में तालिका बनाकर दूसरे में स्तंभ जोड़ने है वाक्य रचना होगा:

DataTable table = new DataTable() 
{ 
    Columns = new DataColumnCollection(new DataColumn[] 
    { 
     new DataColumn("col1"), 
     new DataColumn("col2") 
    }) 
}); 
संबंधित मुद्दे