one way would be to use a DataTable and a BindingSource.
The DataTable is to hold all the books.
The BindingSource is a go-between that passes the DataTable to the DataGridView; it has a Filter capability.
DataTable dt = new DataTable();
BindingSource bs = new BindingSource();
bs.DataSource = dt;
dataGridView1.DataSource = bs;
bs.Filter = searchExpression;
More filter examples can be found here: BindingSource Filter with Starts, contains, ends with and case sensitive options - TechNet Articles - United States (English) - TechNet Wiki