根据单元格值过滤datagridview中的对象列表

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


慕神8447489
浏览 92回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP