আপনি এখানে বর্ণিত হিসাবে অনেক কম কোড সহ একই ফলাফল অর্জন করতে লিনাক এবং বেনামে ধরণের ব্যবহার করতে পারেন ।
আপডেট: ব্লগ নিচে রয়েছে, এখানে লিখিত সামগ্রীটি রয়েছে:
(..) সারণীতে প্রদর্শিত মানগুলি স্ট্রিংয়ের মানগুলির পরিবর্তে স্ট্রিংয়ের দৈর্ঘ্যের প্রতিনিধিত্ব করে (!) এটি আশ্চর্যজনক মনে হতে পারে তবে এটি কীভাবে বাধ্যতামূলক প্রক্রিয়াটি ডিফল্টরূপে কাজ করে - কোনও বস্তু দেওয়া হলে এটি তার প্রথম সম্পত্তিটিকে আবদ্ধ করার চেষ্টা করবে অবজেক্ট (এটি প্রথম সন্ধান করতে পারে সম্পত্তি) যখন উদাহরণটি স্ট্রিং ক্লাসটি পাস করা হয় তখন তার সাথে সংযুক্ত সম্পত্তিটি স্ট্রিং থাকে en দৈর্ঘ্য যেহেতু অন্য কোনও সম্পত্তি নেই যা আসল স্ট্রিং নিজেই সরবরাহ করে।
এর অর্থ হ'ল আমাদের বাধ্যতামূলক অধিকার পেতে আমাদের এমন একটি মোড়কের বস্তুর প্রয়োজন যা একটি স্ট্রিংয়ের প্রকৃত মান সম্পত্তি হিসাবে প্রকাশ করবে:
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);
এই সমাধানটি আশানুরূপভাবে কাজ করার সময় বেশ কয়েকটি লাইনের কোডের প্রয়োজন হয় (বেশিরভাগ ক্ষেত্রে স্ট্রিংয়ের তালিকাটিকে স্ট্রিং মোড়কের তালিকায় রূপান্তর করতে)।
আমরা লিনকিউ এবং বেনামে প্রকারের সাহায্যে এই সমাধানটি উন্নত করতে পারি- আমরা স্ট্রিং র্যাপারগুলির একটি নতুন তালিকা তৈরি করতে লিনকিউ কোয়েরি ব্যবহার করব (স্ট্রিং র্যাপার আমাদের ক্ষেত্রে একটি বেনামি প্রকার হবে)।
var values = from data in testData select new { Value = data };
Table1.SetDataBinding(values.ToList());
আমরা সর্বশেষ পরিবর্তনটি করতে যাচ্ছি লাইনকো কোডটি একটি এক্সটেনশন পদ্ধতিতে স্থানান্তর করা:
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