मैं किसी नए स्तंभ और डेटा को डेटा योग्य में कैसे जोड़ सकता हूं जिसमें पहले से ही डेटा है?


81

मैं एक नए जोड़ सकता हूँ DataColumnएक करने के लिए DataTableउद्देश्य यह है कि पहले से ही डेटा होता है?

छद्म कोड

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", type(System.Int32));

foreach(DataRow row in dr.Rows)
{
    //need to set value to NewColumn column
}

जवाबों:


126

बस अपने कोड के साथ चलते रहें - आप सही रास्ते पर हैं:

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", typeof(System.Int32));

foreach(DataRow row in dt.Rows)
{
    //need to set value to NewColumn column
    row["NewColumn"] = 0;   // or set it to some other value
}

// possibly save your Dataset here, after setting all the new values

dt.AcceptChanges()नया कॉलम और मान जोड़ने के बाद क्या आपको कॉल करने की आवश्यकता थी ?
माइकल नाइस्कर्न

2
@ माइकल: नहीं, वास्तव में नहीं। आपका डेटा सेट अब उन नए मूल्यों के साथ पहले से तैयार है। यदि आप इसे सहेजना चाहते हैं, तो आपको इसे वापस लिखने के लिए (SqlDataAdapter या कुछ अन्य साधनों के माध्यम से) किसी प्रकार की विधि की आवश्यकता होगी। AcceptChanges () कुछ भी नहीं करेगा ("स्वीकार किए गए" के रूप में उन परिवर्तनों को चिह्नित करने के अलावा -> अगली बार जब आप अपना डेटा सहेजने के लिए नहीं जाएंगे, तो उनका पता नहीं चलेगा!)
marc_s

13

क्या इसके foreachबदले नहीं होना चाहिए !?

//call SQL helper class to get initial data  
DataTable dt = sql.ExecuteDataTable("sp_MyProc"); 

dt.Columns.Add("MyRow", **typeof**(System.Int32)); 

foreach(DataRow dr in dt.Rows) 
{ 
    //need to set value to MyRow column 
    dr["MyRow"] = 0;   // or set it to some other value 
} 

7

यहाँ फॉर / फॉरच लूपिंग को कम करने के लिए एक वैकल्पिक समाधान है, इससे लूपिंग का समय कम होगा और अपडेट जल्दी होगा :)

 dt.Columns.Add("MyRow", typeof(System.Int32));
 dt.Columns["MyRow"].Expression = "'0'";

2
@ अक्क्सया, क्या आप इस बात पर विस्तार से विचार करेंगे कि यह समाधान कैसे काम करता है?
मिकेल डूई बोलिंडर

DataTable dt = sql.ExecuteDataTable ("sp_MyProc"); // dt.Columns.Add ("MyRow", typeof (System.Int32)); dt.Columns ["MyRow"]। अभिव्यक्ति = "'0'";
अक्काया

6

केवल आप डिफ़ॉल्ट मान पैरामीटर सेट करना चाहते हैं। यह तीसरी ओवरलोडिंग विधि कहलाती है।

dt.Columns.Add("MyRow", type(System.Int32),0);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.