在datatable中搜索并将行结果添加到另一个数据表中?

时间:2014-05-16 21:00:21

标签: c# asp.net datatable

我有两个dataTable,一个包含从数据库填充的书名和描述,另一个将包含搜索结果的行,关键字值是一个变量。

我想搜索第一个数据表,如果标题或描述包含变量,如果是,我想将行添加到新的DataTable。

我尝试了以下代码,但它不起作用,我在结果上得到异常,如果我搜索精确变量的标题,我在gridview中什么也得不到。

DataTable books = new DataTable();
DataTable searchresults = new DataTable();
DataRow[] results;

 foreach (var v in keywordsarray)
 {
    results = books.Select("BookTitle like '"+v+"'or BookDescription like'"+v+"'");
 }

foreach (DataRow v in results)
{
    searchresults.ImportRow(v);
}

  //the grid view
 search.DataSource = searchresults;
 search.DataBind();

3 个答案:

答案 0 :(得分:0)

在将行导入clone i.e. the structure of source datatable之前,您没有创建destination datatable 以下是代码如何实现这一目标:

DataTable books = new DataTable();
DataRow[] results = default(DataRow[]); //initialized with default
string[] keywordsarray = new string[] { "a", "b" }; //example

books.Columns.Add("BookTitle"); //example added column
books.Columns.Add("BookDescription"); //example added column
books.AcceptChanges();

books.Rows.Add("abc", "def"); //example added row
books.Rows.Add("a", "c");   //example added row

//fill books datatable from database 

DataTable dtSearchResult = books.Clone();   //copy structure from source datatable

foreach (var v in keywordsarray)
{
    results = books.Select("BookTitle like '%" + v + "%' or BookDescription like '%" + v + "%'");

    foreach (DataRow dr in results)
    {
        //must be criteria here to check for duplicate rows in dtSearchResult.
        dtSearchResult.ImportRow(dr);
    }
}          

dtSearchResult.AcceptChanges();

 //the grid view
search.DataSource = dtSearchResult;
search.DataBind();

答案 1 :(得分:0)

以下是我认为您需要让代码看起来以获取数据并避免异常:

List<string> keywordsarray = new List<string>();

/*do something to fill your list with the keyword data*/

DataTable books = new DataTable();
DataTable searchresults = new DataTable();
DataRow[] results;

 foreach (string keyword  in keywordsarray)
 {
    results = books.Select("BookTitle like '"+keyword+"' or BookDescription like'"+keyword+"'");
    foreach (DataRow dr in results)
    {
       searchresults.ImportRow(dr);
    }
 }
 //the grid view
 search.DataSource = searchresults;
 search.DataBind();

如果您想要进行非完全匹配,则需要将%'添加到select中,如另一篇文章所述:

results = books.Select("BookTitle like '%"+keyword+"%' or BookDescription like'%"+keyword+"%'");

答案 2 :(得分:0)

如果您使用的是arraylist,为什么不使用以下内容:

foreach (string str in keywordsarray) 
 { 
    //use str in this case, which may resolve the exception 
 }
相关问题