bạn cũng có thể sử dụng linq và các loại ẩn danh để đạt được kết quả tương tự với ít mã hơn như được mô tả ở đây .
CẬP NHẬT: blog ngừng hoạt động, đây là nội dung:
(..) Các giá trị hiển thị trong bảng đại diện cho độ dài của chuỗi thay vì giá trị chuỗi (!) Có vẻ lạ, nhưng đó là cách cơ chế ràng buộc hoạt động theo mặc định - với một đối tượng nó sẽ cố gắng liên kết với thuộc tính đầu tiên của nó đối tượng (thuộc tính đầu tiên nó có thể tìm thấy). Khi được truyền vào một cá thể, lớp String, thuộc tính mà nó liên kết với là String.Length vì không có thuộc tính nào khác cung cấp chính chuỗi thực.
Điều đó có nghĩa là để có được quyền ràng buộc của chúng ta, chúng ta cần một đối tượng wrapper sẽ hiển thị giá trị thực của một chuỗi dưới dạng thuộc tính:
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);
Mặc dù giải pháp này hoạt động như mong đợi nhưng nó yêu cầu khá nhiều dòng mã (chủ yếu là để chuyển đổi danh sách chuỗi thành danh sách trình bao bọc chuỗi).
Chúng tôi có thể cải thiện giải pháp này bằng cách sử dụng LINQ và các loại ẩn danh- chúng tôi sẽ sử dụng truy vấn LINQ để tạo danh sách trình bao bọc chuỗi mới (trình bao bọc chuỗi sẽ là một loại ẩn danh trong trường hợp của chúng tôi).
var values = from data in testData select new { Value = data };
Table1.SetDataBinding(values.ToList());
Thay đổi cuối cùng mà chúng tôi sẽ thực hiện là chuyển mã LINQ sang một phương thức mở rộng:
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();
}
Bằng cách này, chúng ta có thể sử dụng lại mã bằng cách gọi một phương thức trên bất kỳ tập hợp chuỗi nào:
Table1.SetDataBinding(testData.CreateStringWrapperForBinding());
DataPropertyName
của cột phải làValue