我目前不确定让过滤器在其数据源设置为对象列表的 datagridview 上正常工作的最佳方式。所以给定一个对象: public class DepositAccountBill { #region Properties public int AccountBillID { get; set; } public int AccountID { get; set; } public string AccountNumber { get; set; } public string ControlNumber { get; set; } public DateTime BillDate { get; set; } public decimal DepositAmount { get; set; }}我有一个 datagridview 表,大致如下所示:Account Number | Control Number | Bill Date | Deposit Amount ==================================================================123456 | AJA1234367 | 5/21/2018 | 12.99 123456 | PSA1234367 | 5/21/2018 | 5.77 567332 | HBA1234367 | 5/21/2018 | 1255.99 769843 | AJA1234367 | 5/21/2018 | 12.99 所以当点击一个单元格时。让我们说第一列上的第一个单元格。如果我右键单击一个单元格并在上下文菜单中选择一个选项,该选项表示过滤器,我需要仅显示具有相同帐号的行的 datagridview 表。在这种情况下,它将是第 1 行和第 2 行。为了让我这样做,我必须访问 datagridview 表中填充有 DepositAccountBill 的对象。所以我需要做的是查看并查看我正在查看的列具有所选单元格的值。所以在我的方法中,我迄今为止尝试过没有结果:var collection = (List<DepositAccountBill>)dataGridView1.DataSource;var filterList = collection.Where ( q => (collection.Select(r => GetPropValue(r, dataGridView1.Columns[clickedCell.ColumnIndex].DataPropertyName))) == (clickedCell.Value);dataGridView1.DataSource = filterList.ToList();public object GetPropValue(object obj, string propName){ return obj.GetType().GetProperty(propName).GetValue(obj, null);}我不知道 SELECT 是否是在这里使用的正确 LINQ 方法,或者这是否可能。我想使用 WHERE 因为它只抓取符合条件的对象列表。像这样的东西:var filterList = collection.Where(r => r.AccountNumber == clickedCell.Value); 唯一的问题是r.AccountNumber取决于所选列的数据属性。程序不知道基于所选单元格上的单击事件的数据属性是什么。这就是为什么我认为反思可能是必要的。
1 回答
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消