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() の後に行がないため、これは意味がありません。次に、クリアを削除すると、それらを反復処理して再度追加する必要がなくなります。

于 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();
}

検索結果を持つ dataTable になりました。

于 2014-03-20T12:10:40.790 に答える