0

我正在尝试在绑定到 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
}

我不确定这是否正确,它似乎不起作用。有人可以指出我的错误或更好地向我解释这个概念吗?

4

3 回答 3

1

您正在迭代一组在迭代之前清除(=设为空)的数据行。

消除dt.Rows.Clear();

然后您将“dt”中的项目添加到相同的“dt”?

首先,这没有任何意义,因为在 clear() 之后没有更多的行。其次,如果您删除 clear 则不再使用迭代它们并再次添加它们。

于 2012-10-15T16:49:40.883 回答
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();
于 2012-10-15T16:49:56.653 回答
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();
}

现在数据表有搜索结果。

于 2014-03-20T12:10:40.790 回答