2013-01-24 67 views
7

हाय मैं इस के लिए मेरे 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(); 

     } 

लेकिन मैं अपने स्ट्रिंग में एक त्रुटि है। अगर मैं इस कॉलम को खोजना चाहता हूं तो मैं क्या कर सकता हूं?

उत्तर

23

आपको त्रुटि मिलती है क्योंकि Select पर पैरामीटर फ़िल्टर एक्स्प्रेशन है और आपने सभी कॉलम पास कर दिए हैं। एसक्यूएल में WHERE खंड के रूप में filterExpression को समझें। आप सभी कॉलम चाहते हैं लेकिन आप केवल एक से फ़िल्टर करना चाहते हैं। आप सभी स्तंभों को वैसे भी प्राप्त करते हैं क्योंकि वे DataTable/DataView का हिस्सा हैं, इसलिए आपको उन्हें स्पष्ट रूप से सूचीबद्ध करने की आवश्यकता नहीं है।

आप या तो इस्तेमाल कर सकते हैं DataTable.Select, DatView.RowFilter तरीकों या LINQ-to-DataSet:

LINQ-टू-डेटासेट (जो मैं पसंद करते हैं):

var filtered = tb.AsEnumerable() 
    .Where(r => r.Field<String>("CREATOR").Contains(searchstring)); 

ADO.NET (DataTable.Select):

DataRow[] filteredRows = tb.Select("CREATOR LIKE '%" + searchstring + "%'"); 

एडीओ.NET (DataView.RowFilter):

tb.DefaultView.RowFilter = "CREATOR LIKE '%" + searchstring + "%'"; 

आप के बजाय किसी भी स्तंभ में इस string के लिए खोज करना चाहते हैं:

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

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

को यह बराबर है, लेकिन मैं सभी स्तंभों :( – Tarasov

+0

@Tarasov में खोज करना चाहते हैं: आप सभी स्तंभों चाहते हैं, लेकिन आप एक फ़िल्टर करना चाहते हैं, तो आप के बाद से वे कर रहे हैं वैसे भी सभी स्तंभों मिल 'डेटाटेबल '/' डेटा व्यू 'के सभी भाग। –

+0

मैं इस खोजस्ट्रिंग में प्रत्येक कॉलम खोजना चाहता हूं। मैंने सोचा कि मैं कर सकता हूं :( – Tarasov

2

कुछ भी नहीं की जरूरत है एक DataTable आप विशेष रूप से वापस नहीं आ जाते नीचे दिए गए कोड का उपयोग कर सकते हैं:

DataTable dtResult= tb.Select("CREATOR LIKE '%"+searchstring+"%'").CopyToDataTable(); 
0

आप उस क्वेरी का निर्माण कर सकते हैं जिसका चयन आप चुन सकते हैं।

  if(TextBoxCusName.Text != "") 
      { 
       query = "CustomerName LIKE '%" + TextBoxCusName.Text.Trim()+"%' AND "; 
      } 
      if(TextBoxCusContact.Text != "") 
      { 
       query = query + "CustomerNo LIKE '%" + TextBoxCusContact.Text.Trim() + "%' AND "; 
      } 
      if(TextBoxVehicleNo.Text != "") 
      { 
       query = query + "VehicleNo LIKE '%" + TextBoxVehicleNo.Text.Trim()+"%'"; 
      } 
      if(query.EndsWith("AND ")) 
      { 
       query = query.Remove(query.Length - 4); 
      } 
      DataRow[] result = dataCustomerAndVehicle.Select(query); 

select * from dataCustomerAndVehicle where CustomerName LIKE '%...%' AND ...