我正在尝试对绑定到DataTable的datagridview进行“模糊”搜索。
我正在尝试使用DataTable.Select但我看不到它的工作原理。这是我的代码:
private void buttonSearch_Click(object sender, EventArgs e)
{
string SearchString;
if (this.textSearchString.Text == "")
{
return;
}
SearchString = this.textSearchString.Text;
DataRow[] rows = dt.Select("PartName Like '" + SearchString + "%'");
dt.Rows.Clear();
foreach (DataRow row in rows)
{
dt.Rows.Add(row.ItemArray);
}
this.datagridInventory.DataSource = null;
LoadInventoryList(); //loads up dt and formats columns
}
我不确定这是否正确,似乎不起作用。有人可以指出我的错误或更好地解释这个概念吗?
答案 0 :(得分:1)
在迭代之前,您正在遍历一组清除(=空为)的数据行。
删除dt.Rows.Clear();
然后你要添加" dt"相同的" dt" ??
首先,这没有任何意义,因为clear()之后没有更多的行 其次,如果删除clear,则不再使用迭代它们并再次添加它们。
答案 1 :(得分:1)
尝试删除你的dt.Rows.Clear();命令。它会删除数据表中的所有行。
但是,如果要保留两组数据(原始数据集和所选行),则需要dt.clone()要搜索新数据表的表(.clone只需创建一个与第一个结构相同的新数据表,不复制数据),然后使用clonedTable.Rows.ImportRow()将查询结果转储到新表中。
DataTable clonedTable = dt.Clone();
DataRow[] rows = dt.Select("PartName Like '" + SearchString + "%'");
foreach ( DataRow row in rows ){
cloneTable.importRow( row );
}
clonedTable.acceptChanges();
答案 2 :(得分:0)
StringBuilder searchQuery = new StringBuilder();
foreach (DataColumn column in dataTable.Columns)
{
if (string.IsNullOrEmpty(searchQuery.ToString()))
searchQuery.Append(column.ColumnName + " like '%" + searchString + "%' ");
else
searchQuery.Append(" OR " + column.ColumnName + " like '%" + searchString + "%' ");
}
DataRow[] foundRows = dataTable.Select(searchQuery.ToString());
if (foundRows != null && foundRows.Length > 0)
{
dataTable = new DataTable();
dataTable = foundRows.CopyToDataTable();
}
现在dataTable有搜索结果。