2012-10-10 23 views
33

मुझे एक विशिष्ट पंक्ति से कॉलमनाम और कॉलम डेटाटाइप को फिर से शुरू करने की आवश्यकता है। मैंने देखा है कि सभी उदाहरणों ने एक संपूर्ण डेटाटेबल को फिर से शुरू किया है। मैं सशर्त प्रसंस्करण का एक गुच्छा करने के लिए एक समारोह में एक पंक्ति को पास करना चाहता हूं। मैं पठनीयता की आसानी के लिए सशर्त प्रसंस्करण को अलग करना चाहता हूं। प्रकार की वस्तु कास्ट करने के लिए 'System.String' टाइप करने में असमर्थ 'System.Data.DataColumn:DataRow से DataColumn नाम (डेटाटेबल नहीं)

private void doMore(DataRow dr) 
{ 
    foreach (DataColumn c in dr.ItemArray) //loop through the columns. 
    { 
     MessageBox.Show(c.ColumnName.ToString()); 
    } 
} 

त्रुटि दी

System.InvalidCastException है:

यह है कि मैं क्या है '।

मुझे पंक्ति से कॉलम नाम कैसे मिलेगा या मेरे पास कोई विकल्प नहीं है और पूरे डेटा को फ़ंक्शन में पास करना होगा?

+0

क्या आप वाकई पंक्ति में कॉलम या डेटा दिखाना चाहते हैं? –

उत्तर

57

आपको अभी भी DataTable कक्षा से गुज़रना होगा। लेकिन आप Table संपत्ति का उपयोग करके अपने DataRow उदाहरण का उपयोग करके ऐसा कर सकते हैं।

foreach (DataColumn c in dr.Table.Columns) //loop through the columns. 
{ 
    MessageBox.Show(c.ColumnName); 
} 
+2

धन्यवाद, यह वही था जो मुझे चाहिए था। –

-5

उपयोग DataTable बजाय वस्तु:

foreach(DataColumn c in dr.Table.Columns) 
{ 
    MessageBox.Show(c.ColumnName); 
} 
+8

-1: ओपी ने विशेष रूप से कहा कि वह केवल अपनी विधि में 'डेटारो' पास करना चाहता है। –

5

आप कुछ इस तरह की जरूरत है) DataRow ऑब्जेक्ट पर एक एक्सटेंशन का उपयोग करके, जैसे:

static class Extensions 
{ 
    public static string GetColumn(this DataRow Row, int Ordinal) 
    { 
     return Row.Table.Columns[Ordinal].ColumnName; 
    } 
} 

फिर इसे कॉल करें:

string MyColumnName = MyRow.GetColumn(5); 
9

यदि आप इस एक बहुत वैसे भी कर रहे हैं यह अपने कोड में आसान बनाने के कर सकते हैं (:

private void doMore(DataTable dt) 
    { 
    foreach(DataColumn dc in dt.Columns) 
    { 
    MessageBox.Show(dc.ColumnName); 
    } 
    }