2011-06-13 13 views
5

से डेटा सॉर्ट करता रहा जब मैं कोशिशक्यों DataTable.Select डिफ़ॉल्ट

foreach (DataRow dr in dsMaturity.Tables[0].Select("name not like 'Other%'")) 
{ 
    TotalValue += double.Parse(dr["Value"].ToString()); 
} 

संपादित निम्न डेटा

Name   Value Percent 
0-3 months 0  0 
3-12 months 0  0 
1-5 years  1234.12 28 
5-10 years 13144.11 68 
10-15 years 0  0 
Over 15 years 1233.44 14 
Other Income 2245.12 

साथ एक डाटासेट है: वास्तव में, इसके बाद के संस्करण कोड के समान है। मैं बाल्टी को प्रदर्शित करने के लिए डेटा जोड़ने के लिए समान लूप का उपयोग कर रहा हूं जो अंततः चार्ट को लिखता है।

0-3 months 
10-15 years 
1-5 years 
3-12 months 
5-10 years 
Over 15 years 

क्यों:

foreach (DataRow dr in dsMaturity.Tables[0].Rows) 
{ 
    //Add to the display bucket 
} 

मैं डेटा की तरह हल कर पाने के? मैं डेटा कैसे छोड़ा जा सकता है? यह महत्वपूर्ण है क्योंकि मैं अपने चार्ट ऑब्जेक्ट में डेटा दिखाता हूं। क्या मुझसे कोई चूक हो रही है?

+0

यदि आप ऑर्डरिंग को मजबूर करते हैं, तो मुझे नहीं लगता कि इसे बदल दिया जाएगा। – IAbstract

+0

लगता है कि टेक्स्ट के रूप में पहले कॉलम द्वारा आपके डेटा का ऑर्डर किया जा रहा है। लेकिन, यह क्यों मायने रखता है? –

+0

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

उत्तर

0

कोशिश:

foreach (DataRow dr in dsMaturity.Tables[0].Select("name not like 'Other%'", "column_to_sort_by")) 
{ 
    TotalValue += double.Parse(dr["Value"].ToString()); 
} 

जहां column_to_sort_by एक स्तंभ है कि उचित क्रम में सॉर्ट करता है।

0

आप कहां से डेटा प्राप्त कर रहे हैं?

यदि यह किसी डेटाबेस से आ रहा है तो मैं जांचता हूं और देखता हूं कि जब आप मैन्युअल रूप से क्वेरी चलाते हैं तो ऑर्डर क्या होता है।

जेफ

+0

डेटा एक प्रक्रिया द्वारा बनाया गया है और यह उन्हें डेटासेट लौटने के लिए जोड़ता है। मुझे प्रक्रिया को संशोधित करने की सुविधा नहीं है।मुझे डेटा मिलता है और बस इसे उसी क्रम में दिखाना चाहता है। –

0

डेटा पहले से ही डेटाबेस कारण है कि यह हल कर प्रकट होता है हो सकता है कि में क्रमबद्ध हो जाता है। आपके द्वारा प्रस्तुत डेटा नाम से क्रमबद्ध दिखता है। क्या यह डेटाबेस में है?

+0

यह क्लॉज प्रकार की क्वेरी द्वारा एक साधारण चयन कथन और आदेश नहीं है। डेटाबेस कुछ नियमों से इन पंक्तियों को बनाता है। मैंने जो डेटासेट उल्लेख किया है वह मुझे डेटाबेस से मिलता है। अब मैं मूल डेटासेट से रिकॉर्ड्स को पुन: व्यवस्थित किए बिना चयन का उपयोग कैसे कर सकता हूं? –

1

मुझे यकीन है कि नहीं कर रहा हूँ क्यों/कैसे मूल resultset को बदले बिना इस को हल करने के लिए, लेकिन यहाँ मेरा समाधान नहीं है:

foreach (DataRow dr in dsMaturity.Tables[0].Rows) 
{ 
    if (!dr["Name"].ToString().StartsWith("Other ")) 
    { 
     // adding it to display bucket 
    } 
} 
2

dataTable.Select(filterExpression) एक तरह से आदेश की गारंटी नहीं है। जैसा कि प्रलेखन कहता है, आपको अपने सॉर्ट ऑर्डर की आपूर्ति के लिए एक दूसरे ओवरलोड का उपयोग करना चाहिए।

हमारे प्रयोग में, परिणाम सेट फ़िल्टर कॉलम द्वारा आदेश दिया गया था, लेकिन मैं उसी तरह से व्यवहार करने के लिए .NET के बाद के संस्करणों पर भरोसा नहीं करता (जैसा कि इस तरह से दस्तावेज नहीं है)।

0

सहमत! यह बहुत परेशान है ... मुझे एक ही समस्या है।

आप शुद्ध है 3.5+ आप Linq का उपयोग कर सकते पंक्तियों को फ़िल्टर करने:

var rows = dt.Rows.Cast<DataRow>().Where(r => !((string)r["Name"]).StartsWith("Other") 
1

मैं भी इस समस्या थी, जवाब है:

dataTable.AsEnumerable(); 
बजाय

dataTable.Select();