2012-07-05 17 views
33

मैं कुछ कोड है जो यानीनाम के साथ DataTable स्तंभ के सूचकांक प्राप्त

row["ColumnName"] = someValue; 

मैं भी करने के लिए तुरंत कॉलम में यह पंक्ति के लिए मान सेट करना चाहते स्तंभ नाम से एक DataRow में कोशिकाओं के मूल्य सेट है ऊपर पाए गए एक का अधिकार। स्पष्ट रूप से अगर मैं कॉलम नाम के बजाय इंडेक्स द्वारा सेल प्राप्त कर रहा था तो यह आसान होगा।

row[index + 1] = someOtherValue; 

यानी मैं जब तालिका शुरू में बनाई गई है स्तंभ अनुक्रमणिका और स्तंभ नाम के शब्दकोश के कुछ प्रकार बनाने की जरूरत है, या: तो वहाँ इस प्रकार मुझे करने की अनुमति स्तंभ नाम से स्तंभ अनुक्रमणिका हो रही का एक तरीका है क्या मैं बाद में कॉलम नाम से इंडेक्स प्राप्त कर सकता हूं?

उत्तर

60

DataTable में कॉलम की अनुक्रमणिका प्राप्त करने के लिए आप DataColumn.Ordinal का उपयोग कर सकते हैं। तो अगर आप के रूप में उल्लेख उपयोग Column.Ordinal + 1 अगले स्तंभ की जरूरत है:

row[row.Table.Columns["ColumnName"].Ordinal + 1] = someOtherValue; 
+0

+1 बिल्कुल मुझे जो चाहिए - धन्यवाद! – Andy

+2

आपको '+ 1' बस' पंक्ति [row.Table.Columns ["ColumnName"] की आवश्यकता नहीं है। साधारण] = कुछ अन्यथा; 'करूँगा। –

+3

@ पियर्स: लेकिन ओपी को दूसरे कॉलम के बाद अगले कॉलम की आवश्यकता थी। –

28

इस प्रयास करें:

int index = row.Table.Columns["ColumnName"].Ordinal; 
+2

+1 किया गया है हालांकि टिम आपको इसे हराता है, इसलिए मैं उसे उत्तर के रूप में चिह्नित करूंगा। – Andy

3

मैं जो मुझे स्तंभ नाम के माध्यम से वस्तु हो जाता है DataRow का एक विस्तार विधि लिखा था।

public static object Column(this DataRow source, string columnName) 
{ 
    var c = source.Table.Columns[columnName]; 
    if (c != null) 
    { 
     return source.ItemArray[c.Ordinal]; 
    } 

    throw new ObjectNotFoundException(string.Format("The column '{0}' was not found in this table", columnName)); 
} 

और इस तरह अपनी बुलाया:

DataTable data = LoadDataTable(); 
foreach (DataRow row in data.Rows) 
{   
    var obj = row.Column("YourColumnName"); 
    Console.WriteLine(obj); 
} 
+0

क्या यह एक्सटेंशन "ItemNotFoundException" के बजाय "ऑब्जेक्ट नॉटफाउंड अपवाद" फेंकना चाहिए ?? http://msdn.microsoft.com/en-us/library/system.data.objectnotfoundexception%28v=vs.110%29.aspx –

+0

काफी सही, मैंने जवाब अपडेट किया है। –

+0

-1 DataRow पहले से ही आपके उदाहरण में बनाया गया है यदि आपने पंक्ति ["YourColumnName"] किया है तो यह उस सेल की सामग्री को वापस कर देगा। यदि कॉलम मौजूद नहीं है तो यह सिस्टम को फेंकता है। चेतावनी अपवाद और यह संदेश {"कॉलम 'YourColumnName' तालिका तालिका से संबंधित नहीं है।"} इसलिए जब तक कि इसमें कुछ प्रदर्शन लाभ न हो, तो कृपया हटाएं। इसके अलावा यह सूचकांक कैसे प्राप्त करें के सवाल का जवाब नहीं देता है। – DeadlyChambers

5

आप बस DataColumnCollection.IndexOf

उपयोग कर सकते हैं ताकि आप नाम से आवश्यक स्तंभ के सूचकांक प्राप्त कर सकते हैं तो अपने पंक्ति के साथ इसका इस्तेमाल:

row[dt.Columns.IndexOf("ColumnName")] = columnValue; 
संबंधित मुद्दे