我有两个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();
答案 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
}