2009-05-12 17 views
8

मेरे पास डेटाटेबल में डेटा के 10 रिकॉर्ड हैं जिनमें 3 फ़ील्ड "फू", "बार" और "बाज़" हैं।क्या डेटाग्रिडव्यू में पंक्तियां और कॉलम स्विच करना संभव है?

यदि मैं इसे डेटाग्रिड व्यू में तार जोड़ता हूं तो मुझे 10 पंक्तियां और 3 कॉलम दिखाई देते हैं, और कॉलम हेडर फ़ील्ड के नाम प्रदर्शित करते हैं।

मुझे आश्चर्य है कि पंक्तियों और स्तंभों को उल्टा करना कितना आसान है ताकि उसी डेटा के साथ मैं 3 पंक्तियों और 10 कॉलम के साथ समाप्त हो सकूं, फ़ील्ड नाम पंक्ति शीर्षकों में प्रदर्शित किए जा सकें।


मैं कुछ चीजें manualy, एक OnPaint विधि अधिभावी और फ़ील्ड नाम पंक्ति हेडर कोशिकाओं में सीधे ड्राइंग की तरह कर सकते हैं, लेकिन मैं अधिक स्वचालित कुछ के लिए देख रहा हूँ।

फिर, मैन्युअल रूप से मूल्यों को स्वैप करने का सुझाव है, लेकिन जब तक कि मैं सभी मूल्य स्ट्रिंग नहीं करता, यह काम नहीं करेगा। डेटा तालिका में 3 कॉलम - प्रकार int, फ़्लोट और स्ट्रिंग के फू, बार और बाज़ बस ट्रांसपोज़ नहीं होंगे।

भले ही मैंने इन सभी मैन्युअल परिवर्तनों को प्रबंधित किया हो, फिर भी मेरे डेटा ग्रिड में चेकबॉक्स कॉलम, कॉम्बोबॉक्स कॉलम हैं - ऐसी कोई पंक्ति समकक्ष मौजूद नहीं है - कोई चेकबॉक्स पंक्ति या कॉम्बोबॉक्स पंक्ति नहीं है। जहां मुझे वर्तमान में केवल "कॉम्बोबॉक्स कॉलम जोड़ें" को संकलक को बताने की आवश्यकता है, मुझे फिर से लिखना होगा ताकि प्रत्येक सेल व्यक्तिगत रूप से उत्पन्न हो सके।

आदर्श रूप से मैं एक ट्रांसपोजेबलडेटाग्रिड व्यू चाहता हूं जिसने अतिरिक्त बूल प्रॉपर्टी "ट्रांसपोज्ड" के साथ डेटाग्रिड व्यू की सभी कार्यक्षमताओं का खुलासा किया। इस तरह से मैं अपने सभी कोड को ठीक उसी तरह छोड़ सकता हूं - मुझे ग्रिड के प्रकार को छोड़कर कुछ भी बदलना नहीं होगा।

यदि ऐसा कुछ भी मौजूद नहीं है, तो मुझे बस इसे लिखना और लिखना पड़ सकता है। (मुझे केवल एक वर्ष या तो लेना चाहिए! :)

उत्तर

1

आप इसे प्रोग्राम करने के लिए प्रोग्रामिंग रूप से कर सकते हैं जो आपको चाहिए (उदाहरण के लिए, 10 और 10 बनाने के लिए 7) फिर प्रोग्रामेटिक रूप से पंक्ति, कॉल के साथ कॉल, पंक्ति को स्वैप करना।

+0

क्या आप डेटाटेबल या डेटाग्रिड व्यू में कॉलम जोड़ने का सुझाव दे रहे हैं? –

5

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

मुझे नहीं लगता कि आप पंक्ति शीर्षलेख सेट कर सकते हैं उसी तरह आप कॉलम हेडर सेट कर सकते हैं (या कम से कम मुझे नहीं पता), ताकि आप अलग-अलग कॉलम में फ़ील्ड नाम डाल सकें।

DataTable oldTable = new DataTable(); 

... 

DataTable newTable = new DataTable(); 

newTable.Columns.Add("Field Name"); 
for (int i = 0; i < oldTable.Rows.Count; i++) 
    newTable.Columns.Add(); 

for (int i = 0; i < oldTable.Columns.Count; i++) 
{ 
    DataRow newRow = newTable.NewRow(); 

    newRow[0] = oldTable.Columns[i].Caption; 
    for (int j = 0; j < oldTable.Rows.Count; j++) 
     newRow[j+1] = oldTable.Rows[j][i]; 
    newTable.Rows.Add(newRow); 
} 

dataGridView.DataSource = newTable; 
+0

उत्तर के लिए धन्यवाद - क्या होता है यदि मेरे पास एक बूल डेटाकॉलम और एक स्ट्रिंग डेटाकॉलम है - मैं किस प्रकार ट्रांसपोज़ड ग्रिड के कॉलम बना सकता हूं? –

+0

यदि आप प्रकार सेट नहीं करते हैं, तो यह स्ट्रिंग पर डिफ़ॉल्ट होता है, इसलिए यदि आप केवल उस उपयोगकर्ता को डेटा दिखाना चाहते हैं जो आपके लिए ठीक है, क्योंकि अन्य प्रकार के मान स्वचालित रूप से परिवर्तित हो जाएंगे। अन्य संभावना वस्तु को ऑब्जेक्ट सेट करना है। इस प्रकार के परिवर्तनीय कुछ भी हो सकता है। – svick

2

प्राप्त कर सकते हैं मैं डेवलपर एक्स्प्रेस का उपयोग वर्टिकल ग्रिड .. ऐसा लगता है कि आप घुमावदार ग्रिड चाहते हैं। यह प्रति पंक्ति एक अलग संपादक के लिए भी अनुमति देता है।

Link to vertical grid product page

0
मेरे मामले नई तालिका के सभी स्तंभों के लिए एक नाम जोड़ने के लिए भी जरूरत में

। मैंने इस तरह एक ट्रांसपोज़ड टेबल उत्पन्न करने के लिए एक फ़ंक्शन लिखा:

static public DataTable Transpose(DataTable inputTable, List<string> newColumnNames) 
{ 
    DataTable outputTable = new DataTable(); 

    ///You should also verify if newColumnsNames.Count matches inputTable number of row 

    //Creates the columns, using the provided column names. 
    foreach (var newColumnName in newColumnNames) 
    { 
     outputTable.Columns.Add(newColumnName, typeof(string)); 
    } 

    foreach (DataColumn inputColumn in inputTable.Columns) 
    { 
     //For each old column we generate a row in the new table 
     DataRow newRow = outputTable.NewRow(); 

     //Looks in the former header row to fill in the first column 
     newRow[0] = inputColumn.ColumnName.ToString(); 

     int counter = 1; 
     foreach (DataRow row in inputTable.Rows) 
     { 
      newRow[counter] = row[inputColumn.ColumnName].ToString(); 
      counter++; 
     } 
     outputTable.Rows.Add(newRow); 
    } 

    return outputTable; 

} 
संबंधित मुद्दे