2009-04-20 9 views
13

मुझे एक डाटाएव को एक डेटाटेबल में कॉपी करने की आवश्यकता है। ऐसा लगता है कि ऐसा करने का एकमात्र तरीका आइटम द्वारा डेटाव्यू आइटम के माध्यम से फिर से शुरू करना है और एक डेटाटेबल पर कॉपी करना है। कोई बेहतर तरीका ज़रूर होगा।सी # में डेटाटेव को डेटाटाइव की प्रतिलिपि बनाने का सबसे आसान तरीका?

उत्तर

36
dt = DataView.ToTable() 

या

dt = DataView.Table.Copy(),

या

dt = DataView.Table.Clone();

+1

धन्यवाद, गूगल मुझे बहुत बुरी तरह से विफल रहा था। उम्मीद है कि यह पृष्ठ अत्यधिक रैंक होगा। – Ravedave

+1

धन्यवाद जोस .. यह काम किया ... –

+8

नोट: 'DataView.ToTable()' केवल डेटा व्यू के मानों की प्रतिलिपि बनायेगा। 'DataView.Table.Copy()' स्रोत डेटाटेबल की प्रतिलिपि बनाएगा, डेटाव्यू के फ़िल्टर किए गए डेटा नहीं। 'DataView.Table.Clone()' केवल स्रोत डेटाटेबल की संरचना की प्रतिलिपि बनायेगा। – Homer

3

उत्तर मेरी स्थिति के लिए काम नहीं करता है क्योंकि मेरे पास अभिव्यक्तियों के साथ कॉलम हैं। DataView.ToTable() केवल मूल्यों की प्रतिलिपि करेगा, अभिव्यक्तियों पर नहीं।

सबसे पहले मैं इस कोशिश की:

//clone the source table 
DataTable filtered = dt.Clone(); 

//fill the clone with the filtered rows 
foreach (DataRowView drv in dt.DefaultView) 
{ 
    filtered.Rows.Add(drv.Row.ItemArray); 
} 
dt = filtered; 

लेकिन यह है कि समाधान भी सिर्फ 1000 पंक्तियों के लिए बहुत धीमी गति से किया गया था।

समाधान है कि मेरे लिए काम किया है:

//create a DataTable from the filtered DataView 
DataTable filtered = dt.DefaultView.ToTable(); 

//loop through the columns of the source table and copy the expression to the new table 
foreach (DataColumn dc in dt.Columns) 
{ 
    if (dc.Expression != "") 
    { 
     filtered.Columns[dc.ColumnName].Expression = dc.Expression; 
    } 
} 
dt = filtered; 
संबंधित मुद्दे