2017-09-15 74 views
0

我的程序运行时,客户端输入他正在查找的内容,并在SQL数据库中搜索它。当他点击搜索时,它会出现在datagridview中。在整个表格中运行搜索

我希望客户输入任何单词,单词的开头或结尾,而不是在一列中查看它将在整个表中查找。

如何编程?

clsdatasource.search获取文本框中的内容并将其存储在变量中。

DataView myview = new DataView(mytable); 
myview.RowFilter = "CUSTOMER='" + clsDataSource.search + "'"; 
dataGridView1.DataSource = myview; 

我试了一下:

for (int i = 0; i < myset.Tables[0].Columns.Count; i++) { 
    DataRow[] MyDR = myset.Tables[0].Select(myset.Tables[0].Columns[i].ToString() + "='" + clsDataSource.search + "'"); 
    if (MyDR.Length > 0) { 
    dataGridView1.DataSource = myview; 
    } 
} 
+0

您可以遍历所有行并检查每个列的部分字符串匹配。 –

+0

所以我只是试过,但我有一些列存储日期和时间 – Cbz

+0

这样的事情可能会工作︰foreach(var gridView.Rows){foreach(var c in r.Columns){// code to search here如果你使用linq,你可以在内部的foreach循环中做这样的事情,我想:foreach(var c in r.Columns.Where(x => x.DataType!= typeof( DateTIme)) –

回答

0

试试这个:

public partial class Form1 : Form 
{ 
    DataGridView dataGridView; 
    DataTable dataTable; 
    DataView dataView; 
    TextBox textBoxSearch; 

    public Form1() 
    { 
     //InitializeComponent(); 

     Width = 400; 
     dataGridView = new DataGridView { Parent = this, Dock = DockStyle.Top }; 
     textBoxSearch = new TextBox { Parent = this, Top = 200 }; 
     textBoxSearch.TextChanged += TextBoxSearch_TextChanged; 

     dataTable = new DataTable(); 

     dataTable.Columns.Add("Id", typeof(int)); 
     dataTable.Columns.Add("Name", typeof(string)); 
     dataTable.Columns.Add("BirthDate", typeof(DateTime)); 

     dataTable.Rows.Add(1, "Bob", new DateTime(2001, 01, 01)); 
     dataTable.Rows.Add(2, "John", new DateTime(1999, 09, 09)); 
     dataTable.Rows.Add(3, "Alice", new DateTime(2002, 02, 02)); 

     dataView = new DataView(dataTable); 
     dataGridView.DataSource = dataView; 
    } 

    private void TextBoxSearch_TextChanged(object sender, EventArgs e) 
    { 
     var text = textBoxSearch.Text; 

     var values = dataTable.Columns 
      .OfType<DataColumn>() 
      .Select(c => "Convert([" + c.ColumnName + "], System.String)") 
      .Select(c => c + " like '%" + text + "%'"); 

     var filter = string.Join(" or ", values); 

     dataView.RowFilter = filter; 
    } 
} 

要在不同类型的所有列搜索,我将它们转换为字符串。然后使用like运算符。最后,结合or

+0

谢谢!我正在尝试类似的东西,但无法弄清楚如何采取所有的专栏! – Cbz