我想對已經加載到DataGridView中的數據實施簡單的快速搜索/ aka過濾器,而不更改數據源。在不更改數據源的情況下過濾DataGridView - null參考錯誤
這是我簡單的用戶界面:
這是我試過(基於答案here)來過濾我的數據:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
List<Line> myLines = new List<Line>()
{
new Line() { Sku = "VCF001", Qty = 1 },
new Line() { Sku = "VCF002", Qty = 1 },
new Line() { Sku = "VCF003", Qty = 1 },
};
dataGridView1.DataSource = myLines;
}
private void searchBox_TextChanged(object sender, EventArgs e)
{
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter
= string.Format("Sku LIKE '%{0}%'", searchBox.Text);
}
}
public class Line
{
public string Sku { get; set; }
public int Qty { get; set; }
}
當我開始鍵入 「VC」我得到這個錯誤:
System.NullReferenceException was unhandled Message=Object reference not set to an instance of an object.
如何快速搜索/過濾應該工作是這樣的:
- 如果鍵入「VC」它應該顯示所有3行
- 如果鍵入「VCF001」,只顯示其行那sku
任何想法我在做什麼錯在這裏?
這是'在way'修改數據源。難道不能使用DataGridView中的內置'RowFilter'功能?發佈的問題是我的實際代碼的減少版本。在我的真實場景中,數據源是由db查詢填充的DataTable,因此爲什麼我說我不想修改數據源(即爲每個搜索重新排隊)... – Latheesan
我的意思是're-query'不要在上面的回覆中重新排隊...... – Latheesan
那麼你可以嘗試'DataGridView.Select'。 http://stackoverflow.com/questions/2333824/net-framework-datatable-selectstring-method-when-the-filter-expression-contai – heq