आप यहाँ वर्णित के रूप में बहुत कम कोड के साथ एक ही परिणाम प्राप्त करने के लिए linq और अनाम प्रकारों का उपयोग कर सकते हैं ।
अद्यतन: ब्लॉग नीचे है, यहाँ सामग्री है:
.. ऑब्जेक्ट (पहली संपत्ति जो इसे मिल सकती है)। एक उदाहरण के रूप में स्ट्रिंग वर्ग को जिस संपत्ति से बांधता है वह स्ट्रिंग है। गति। चूंकि कोई अन्य संपत्ति नहीं है जो वास्तविक स्ट्रिंग प्रदान करेगी।
इसका मतलब है कि हमारे बाध्यकारी अधिकार पाने के लिए हमें एक रैपर ऑब्जेक्ट की आवश्यकता है जो एक संपत्ति के रूप में एक स्ट्रिंग के वास्तविक मूल्य को उजागर करेगा:
public class StringWrapper
{
string stringValue;
public string StringValue { get { return stringValue; } set { stringValue = value; } }
public StringWrapper(string s)
{
StringValue = s;
}
}
List<StringWrapper> testData = new List<StringWrapper>();
Table1.SetDataBinding(testdata);
हालांकि यह समाधान उम्मीद के मुताबिक काम करता है, इसके लिए कोड की कुछ लाइनों की आवश्यकता होती है (ज्यादातर स्ट्रिंग की सूची को स्ट्रिंग रैपर्स की सूची में बदलने के लिए)।
हम LINQ और अनाम प्रकारों का उपयोग करके इस समाधान में सुधार कर सकते हैं- हम स्ट्रिंग रैपरों की नई सूची बनाने के लिए LINQ क्वेरी का उपयोग करेंगे (स्ट्रिंग रैपर हमारे मामले में एक अनाम प्रकार होगा)।
var values = from data in testData select new { Value = data };
Table1.SetDataBinding(values.ToList());
अंतिम बदलाव जो हम करने जा रहे हैं, वह LINQ कोड को एक्सटेंशन विधि में ले जाना है:
public static class StringExtensions
{
public static IEnumerable CreateStringWrapperForBinding(this IEnumerable<string> strings)
{
var values = from data in strings
select new { Value = data };
return values.ToList();
}
इस तरह हम किसी भी संग्रह के तार पर एकल विधि कहकर कोड का पुन: उपयोग कर सकते हैं:
Table1.SetDataBinding(testData.CreateStringWrapperForBinding());
DataPropertyName
स्तंभ का होना चाहिएValue