2012-10-01 9 views
14

के रूप में हैशसेट मैं शेयरपॉइंट वेबपार्ट के लिए कोड को अनुकूलित करने का प्रयास कर रहा हूं। मैं एक पुनरावर्तक नियंत्रण होता है:डेटाशॉट

<asp:Repeater ID="CountryOptionsRepeater" runat="server"> 
    <ItemTemplate> 
     <option value='<%#Eval("CountryName") %>'><%#Eval("CountryName") %></option> 
    </ItemTemplate> 
</asp:Repeater> 

मैं डेटा की मेज

countriesList = countriesList.Distinct<String>().ToList<String>(); 
countriesList.Sort(); 
//var noDupsCountriesList = new HashSet<String>(countriesList); 

DataTable dt = new DataTable(); 
dt.Columns.Add("CountryName"); 

foreach (String countryName in countriesList) 
{ 
    DataRow dr = dt.NewRow(); 
    dr["CountryName"] = countryName; 
    dt.Rows.Add(dr); 
} 

CountryOptionsRepeater.DataSource = dt; 
CountryOptionsRepeater.DataBind(); 
this.DataBind(); 

साथ यह भरने कर रहा हूँ वहाँ एक रास्ता सीधे पुनरावर्तक का एक ही विन्यास के साथ डेटा स्रोत के लिए HashSet वस्तु (noDupsCountriesList) बाध्य करने के लिए है, के क्रम में अनुकूलन लाने के लिए?

कुछ की तरह:

//countriesList = countriesList.Distinct<String>().ToList<String>(); 
//countriesList.Sort(); 
var noDupsCountriesList = new HashSet<String>(countriesList); 

CountryOptionsRepeater.DataMember = "CountryName"; // ?? 
CountryOptionsRepeater.DataSource = noDupsCountriesList; 
CountryOptionsRepeater.DataBind(); 
this.DataBind(); 
+0

तुम क्यों DataTable या HashSet आवश्यकता क्यों है? क्या 'CountryOptionsRepeater.DataSource = countriesList;' चाल नहीं है? – paul

+0

बाध्यकारी को सीधे 'हैशसेट <>' पर करना संभव हो सकता है, लेकिन यह आपको वर्णानुक्रम से क्रमबद्ध देशों को नहीं देगा, ताकि आपके कोड से आवश्यक हो। – MiMo

+1

@MiMo, धन्यवाद, मैं 'ऑर्डरबी' कथन जोड़ूंगा (इस धारणा के साथ कि हैशसेट की 'प्रारंभिकता + ऑर्डरबी' सूची <> ''विशिष्ट() + toList() + सॉर्ट()') कॉल करने से कहीं अधिक अनुकूलित है। – Annie

उत्तर

6

मुझे लगता है कि इस लाइन कोड के अपने दूसरे खंड की जगह सकता है:

CountryOptionsRepeater.DataSource = 
    countriesList 
    .Distinct() 
    .OrderBy(c => c) 
    .Select(c => new { CountryName = c }) 
    .ToList(); 
+1

के साथ डेटासोर्स का उपयोग कर सकते हैं यह एक त्रुटि फेंक रहा है: कॉलम नाम 'CountryName' नहीं मिला। क्या मुझे एसीएक्स फ़ाइल में '' का उपयोग करना चाहिए (क्योंकि सूची में कॉलम शीर्षक नहीं है)? – Annie

+1

यदि मूल प्रकार का उपयोग किया जाता है तो डेटामेम्बर खाली छोड़ा जाना चाहिए। डेटामेम्बर इस प्रकार की संपत्ति निर्दिष्ट करने के लिए है। – Shelakel