2009-01-03 6 views
10

क्या किसी ऑब्जेक्ट की एक से अधिक संपत्ति से बना सी # के माध्यम से asp.net में ड्रॉपडाउन सूची की डेटाटेक्स्टफील्ड संपत्ति बनाने का कोई तरीका है?ड्रॉपडाउनलिस्ट डेटाटेक्स्टफिल्ड गुणों से बना है?

public class MyObject 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string FunkyValue { get; set; } 
    public int Zip { get; set; } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<MyObject> myList = getObjects(); 
    ddList.DataSource = myList; 
    ddList.DataValueField = "Id"; 
    ddList.DataTextField = "Name"; 
    ddList.DataBind(); 
} 

मैं चाहता हूं उदा। "नाम" का उपयोग न करें, लेकिन "नाम (ज़िप)" उदाहरण के लिए।

निश्चित रूप से, मैं माइओब्जेक्ट क्लास बदल सकता हूं, लेकिन मैं ऐसा नहीं करना चाहता (क्योंकि मायऑब्जेक्ट क्लास मॉडल क्लास में है और मुझे यूआई में जो कुछ चाहिए वह नहीं करना चाहिए)।

public string DisplayValue 
{ 
get { return string.Format("{0} ({1})", Name, Zip); } 
} 

या यदि आप MyObject संशोधित नहीं कर सकते, प्रस्तुति परत (बस प्रदर्शित करने के लिए) में एक आवरण वस्तु बनाने:

उत्तर

22

है कि संपत्ति के लिए MyObject वर्ग और बाँध के लिए एक और संपत्ति जोड़ें। यह भी कुछ LINQ का उपयोग किया जा सकता है:

List<MyObject> myList = getObjects(); 
ddList.DataSource = (from obj in myList 
        select new 
        { 
         Id = obj.Id, 
         Name = string.Format("{0} ({1})", obj.Name, obj.Zip) 
        }).ToList(); 
ddList.DataValueField = "Id"; 
ddList.DataTextField = "Name"; 
ddList.DataBind(); 

(खेद मैं दृश्य स्टूडियो उपलब्ध नहीं है, इसलिए वहाँ कोड में त्रुटियों हो सकता है)

4

मैं यह पढ़ सिफारिश करेंगे: http://martinfowler.com/eaaDev/PresentationModel.html

अनिवार्य रूप से आप एक वर्ग बनाना चाहते हैं जो एक विशेष यूआई को बाध्यकारी का प्रतिनिधित्व करता है। तो आप अपने मॉडल (मेरे ऑब्जेक्ट में मेरा ऑब्जेक्ट) को एक ViewModel ऑब्जेक्ट पर मैप करेंगे, और उसके बाद ड्रॉप डाउन सूची को बाध्य करेंगे। चिंताओं को अलग करने के बारे में सोचने का यह एक अच्छा तरीका है।

संपादित करें: http://blogs.msdn.com/dancre/archive/2006/10/11/datamodel-view-viewmodel-pattern-series.aspx

+0

धन्यवाद, यह बेहतर आर्किटेक्चर प्राप्त करने के लिए एक उपयोगी संकेत है, लेकिन आप मेरे प्रश्न को पूरी तरह से समझ गए। :) – karlis

2

Btw, इससे पहले कि आप डेटा स्रोत आवंटित बताए "DataTextField" और "DataValueField" का प्रयास करें: यहाँ ViewModel पर एक और ब्लॉग श्रृंखला है। ऐसा करने से डाटाबेसिंग के दौरान "चयनित इंडेक्स चेंज" ईवेंट को फायर करना बंद हो जाएगा ...

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