【问题标题】:Filter datagridview that fill with IList过滤用 IList 填充的 datagridview
【发布时间】:2014-02-23 22:19:08
【问题描述】:

使用此代码加载我的资源:

public IList LoadResources()
        {
            using (var proxy = new MetaDataServiceReference.MetaDataManagementServiceClient())
            {
                var errorList = new MetaDataServiceReference.ValidationError[] { };
                var result = (from p in proxy.ResourceLoadAll(ref errorList)
                              select new 
                            {
                                BookAuthorId = p.ResourceID,
                                BookAuthorTitle= p.BookTitle
                            }).ToList();
                return result;
            }            
        }

并用这段代码填充我的数据网格视图:

private void LoadResources()
        {
            ContentPool Db = new ContentPool();
            IList Resources = Db.LoadResources();
            DgvResourcesOrAuthors.DataSource = Resources;
            DgvResourcesOrAuthors.Columns[0].Visible = false;
        }

如何在 FilterTextBox 文本更改中过滤我的 datagridview 数据?

我使用例如此代码,但有错误(对象引用未设置为对象的实例。):

private void TxFilter_TextChanged(object sender, EventArgs e)
        {
            (DgvResourcesOrAuthors.DataSource as DataTable).DefaultView.RowFilter = string.Format("BookAuthorTitle = '{0}'", TxFilter.Text.Trim());
        }

【问题讨论】:

    标签: datagridview filter ilist


    【解决方案1】:

    您得到NullReferenceException,因为DataGridView.DataSource 的类型为IList,而您的类型转换为DataTable

    用List数据实现过滤,

    private void TxFilter_TextChanged(object sender, EventArgs e)
    {
        IList var = DgvResourcesOrAuthors.DataSource as IList;
        if(var != null)
        {
            IList filteredData = //iterate list and filter based on condition
            DgvResourcesOrAuthors.DataSource = filteredData;
        }
    }
    

    删除过滤后,将DataSource 设置为原始列表。

    IList Resources = Db.LoadResources();
    DgvResourcesOrAuthors.DataSource = Resources;
    

    如果您不想更改数据源,请使用DataTableBindingSource,然后您可以按照帖子中的说明进行过滤。

    private void TxFilter_TextChanged(object sender, EventArgs e)
    {
        (DgvResourcesOrAuthors.DataSource as DataTable).DefaultView.RowFilter = string.Format("BookAuthorTitle = '{0}'", TxFilter.Text.Trim());
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-18
      • 1970-01-01
      • 2017-01-24
      • 2016-12-11
      • 2010-12-28
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多