使用以下代码加载我的资源:
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;
}
}
并使用以下代码填充我的datagridview:
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());
}
答案 0 :(得分:1)
您收到NullReferenceException
,因为DataGridView.DataSource
的类型为IList
,您的类型为DataTable
。
使用列表数据实现过滤,
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;
如果您不想更改数据源,请使用DataTable
和BindingSource
,然后您可以按照帖子中的说明进行过滤。
private void TxFilter_TextChanged(object sender, EventArgs e)
{
(DgvResourcesOrAuthors.DataSource as DataTable).DefaultView.RowFilter = string.Format("BookAuthorTitle = '{0}'", TxFilter.Text.Trim());
}