我目前不确定让过滤器在其数据源设置为对象列表的 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取决于所选列的数据属性。程序不知道基于所选单元格上的单击事件的数据属性是什么。这就是为什么我认为反思可能是必要的。
相关分类