我有一个StudentViewModel
对象列表。我将此列表与DataGridView绑定,并根据绑定模型的属性将列生成设置为自动。
public async Task LoadGridView()
{
Tuple<List<StudentViewModel>, int> result = await App.StudentService.SearchAsync(studentRequestModel);
dataGridView1.DataSource = null;
dataGridView1.DataSource = result.Item1;
}
在StudentViewModel中,我使用自定义属性IsViewable
修饰了一些属性。
[AttributeUsage(AttributeTargets.Property)]
public class IsViewable: Attribute
{
public bool Value { get; set; }
}
用法:
[IsViewable(Value = true)]
public string Name { get; set; }
想法是,在绑定UI控件之前,我想过滤列表并创建一个新的匿名对象列表,以便我的网格只填充选定的属性。
注意:我不想创建特定于网格的单独视图模型。如果它产生性能问题,我会重构它。
答案 0 :(得分:1)
问题是,我序列化了动态列表,然后反序列化。然后我将该动态列表与datagridview绑定,它就像一个魅力。
整个项目可以在foyzulkarim/GenericComponents
找到来电/使用:
Type type = typeof(StudentViewModel);
PropertyInfo[] properties = type.GetProperties();
var infos = properties.Where(x => x.CustomAttributes.Any(y => y.AttributeType == typeof(IsViewable))).ToList();
List<StudentViewModel> models = result.Item1;
List<dynamic> list = models.Select(x => GetValue(x, infos)).ToList();
string serializeObject = JsonConvert.SerializeObject(list);
var deserializeObject = JsonConvert.DeserializeObject<List<dynamic>>(serializeObject);
dataGridView1.DataSource = deserializeObject;