【问题标题】:How to assign values to some data grid view column when dgv is binded绑定dgv时如何为某些数据网格视图列分配值
【发布时间】:2018-11-25 17:46:25
【问题描述】:

我有一个绑定到列表的数据网格视图。 List 是一个对象列表

List<User> userList = new List<User>();

User user = new User(){
    Name = "Diana",
    Age = "37"
}

userList.Add(user);

myDataGridView.DataSource = null;

myDataGridView.DataSource = userList();
myDataGridView.Columns["Name"].DataPropertyName = "Name";
myDataGridView.Columns["Age"].DataPropertyName = "Age";

但我还有一列是“权限”

我想检查用户是否年龄 > 18,然后相关用户行的权限列值将是字符串“有效” 我的用户类中没有权限属性,我不想添加它。我该怎么做?

【问题讨论】:

标签: c# datagridview


【解决方案1】:

您所描述的内容是可行的,但是按照您描述的方式进行操作存在一些缺点。首先,在网格中引入一个“不是”数据源部分的新列将需要代码“管理”该列。这意味着如果网格被排序/过滤等......你的代码将不得不通过网格并管理“年龄> 18”列。我猜您可能正在寻找可以自动执行此操作的东西。

我很好奇为什么你需要这个列,因为“年龄”列已经存在,我认为用户不会被“直观地看到”年龄列并确定该值是否超过 18 岁。可能为小于 18 的值着色单元格,而不是“添加”一个新列。只是一个想法。

此外,我不确定“为什么”您不想将“permission”属性添加到类中。它是从现有数据中“计算”出来的值,因此,实际上不需要将值保留在原始数据源中。如果将以下代码添加到User 类会发生什么?我打赌它会显示你描述的“权限”值。

public string Permission {
  get {
    if (Age > 18)
      return "Valid";
    else
      return "Invalid";
  }
}

这是一种方法,但是,将List&lt;T&gt; 用作网格的DataSource 有一些缺点。也就是说,如果您不进行更多编码,用户将无法将新行“添加”到网格中。这就是为什么我建议您查看BindingSourceBindingList&lt;User&gt; 作为List&lt;User&gt; 的替代品……这些Binding 控件将更容易处理添加新行、过滤、排序等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    相关资源
    最近更新 更多