如何使用searchstring搜索数据表中的行?

Tar*_*sov 15 c# datatable listview datarow

嗨,我想在我的DataTable中搜索行,我试试这个:

 protected void imggastsuche_Click(object sender, EventArgs e) 
        {
            string searchstring = txtgastsuche.Text;

            DataTable tb = DataBaseManager.GetDataTable(mysqlconnectionstring);

            DataRow[] foundRows = tb.Select("FIRSTNAME,LASTNAME,NAME,COMPANY,TIMEFROM,TIMETO,CREATOR Like '%" + searchstring + "%'");

            tb = foundRows.CopyToDataTable();

            this.ListView.DataSource = tb;
            this.ListView.DataBind();

        }
Run Code Online (Sandbox Code Playgroud)

但我的字符串中有错误.如果我想搜索此列,我该怎么办?

Tim*_*ter 36

您收到错误,因为参数to SelectfilterExpression并且您已经传递了所有列.将filterExpression理解为WHEREsql中的子句.您想要所有列,但只想过滤一个.你得到所有列,因为它们都是DataTable/的一部分DataView你不需要明确地列出它们.

您可以使用DataTable.Select,DatView.RowFilter方法或LINQ-to-DataSet:

LINQ-To-DataSet(我更喜欢):

var filtered = tb.AsEnumerable()
    .Where(r => r.Field<String>("CREATOR").Contains(searchstring));
Run Code Online (Sandbox Code Playgroud)

ADO.NET(DataTable.Select):

DataRow[] filteredRows = tb.Select("CREATOR LIKE '%" + searchstring + "%'");
Run Code Online (Sandbox Code Playgroud)

ADO.NET(DataView.RowFilter):

 tb.DefaultView.RowFilter = "CREATOR LIKE '%" + searchstring + "%'";
Run Code Online (Sandbox Code Playgroud)

如果您想string在任何列中搜索此内容,请执行以下操作:

DataRow[] filteredRows = tb.Select("FIRSTNAME LIKE '%" + searchstring + "%' OR LASTNAME LIKE '%" + searchstring + "%' OR NAME LIKE '%" + searchstring + "%' OR COMPANY LIKE '%" + searchstring + "%' OR CREATOR LIKE '%" + searchstring + "%'");
Run Code Online (Sandbox Code Playgroud)

与Linq一样:

var filtered = tb.AsEnumerable()
    .Where(r => r.Field<String>("FIRSTNAME").Contains(searchstring)
           ||   r.Field<String>("LASTNAME").Contains(searchstring))
           ||   r.Field<String>("NAME").Contains(searchstring)
           ||   r.Field<String>("COMPANY").Contains(searchstring)
           ||   r.Field<String>("CREATOR").Contains(searchstring));
Run Code Online (Sandbox Code Playgroud)


小智 6

如果其他人需要专门返回一个DataTable,则可以使用以下代码:

DataTable dtResult= tb.Select("CREATOR LIKE '%"+searchstring+"%'").CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)