2012-10-15 111 views
0

我想獲得一個「模糊」搜索工作在DataTable綁定到DataTable。搜索數據表

我想使用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 
} 

我不確定這是否正確,它似乎不工作。有人可以指出我的錯誤或更好地向我解釋這個概念嗎?

回答

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(); 
+0

很棒!感謝它現在有道理。 – Ryan

1

您正在遍歷一組數據行,您在迭代之前清除(=變爲空)。

刪除dt.Rows.Clear();

然後要添加從「DT」項目相同的「DT」?

首先,這是沒有意義的,因爲clear()之後沒有更多行() 其次,如果刪除clear,則不再使用來遍歷它們並再次添加它們。

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中有搜索結果。