2013-03-03 7 views
5

में एकाधिक पैरामीटर मैं टेक्स्ट टेक्स्ट किए गए ईवेंट के तहत एक रोफिल्टर के रूप में टेक्स्टबॉक्स डालने का प्रयास कर रहा हूं!पंक्ति फ़िल्टर

नीचे कोड ग्रिड के लिए प्रयोग किया जाता है उचित Reg_NumberयाCustomer_Name जो पाठ बॉक्स में दर्ज किया गया है प्राप्त करने के लिए!

वाट के आश्चर्य की बात वास्तविकता यह है कि इस कोड को सीधे 2 तर्क

(यानी)
((DataTable)radGridView1.DataSource).DefaultView.RowFilter = "Reg_Number like '%" + radTextBoxControl1.Text + "%'";

लाइनों स्विच करने की कोशिश की है, लेकिन कोई बात नहीं मैं क्या किया है, यह 1 एक पर ध्यान नहीं देता और 2

मैंने एक लाइन में दोनों को रखने और दोनों को पाने की कोशिश की, बीटी काम नहीं करते, कृपया मुझे बताएं!

private void radTextBoxControl1_TextChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     ((DataTable)radGridView1.DataSource).DefaultView.RowFilter = 
      "Customer_Name like '%" + radTextBoxControl1.Text + "%'"; 
     ((DataTable)radGridView1.DataSource).DefaultView.RowFilter = 
      "Reg_Number like '%" + radTextBoxControl1.Text + "%'"; 
    } 
    catch (Exception) { } 
} 

उत्तर

6

इसका कारण यह है दूसरा काम की जगह है पहले एक

myDataTable.DefaultView.RowFilter = "firstFilter"; 
myDataTable.DefaultView.RowFilter = "secondFilter"; 
// Now RowFilter is "secondFilter" 

आप एक तार्किक के साथ 2 फिल्टर गठबंधन करना चाहिए या परिणाम दोनों को पूरा प्राप्त करने के लिए शर्तें:

myDataTable.DefaultView.RowFilter = "firstFilter OR secondFilter"; 

var view = ((DataTable)radGridView1.DataSource).DefaultView; 
string escapedText = radTextBoxControl1.Text.Replace("'", "''"); 
view.RowFilter = "Customer_Name LIKE '%" + escapedText + "%' OR " + 
        "Reg_Number LIKE '%" + escapedText + "%'"; 

यह String.Format साथ स्पष्ट हो जाता है:

view.RowFilter = String.Format("Customer_Name LIKE '%{0}%' OR Reg_Number LIKE '%{0}%'", 
           escapedText); 

या, के बाद से सी # 7.0, स्ट्रिंग प्रक्षेप के साथ:

view.RowFilter = 
    $"Customer_Name LIKE '%{escapedText}%' OR Reg_Number LIKE '%{escapedText}%'"; 

इसके अलावा, दो एकल उद्धरण द्वारा एकल उद्धरण बदलना सुनिश्चित करें। इस एसक्यूएल स्ट्रिंग के लिए सक्षम बनाता उद्धरण शामिल करने के लिए और से बचाता है एसक्यूएल इंजेक्शन-:

SELECT * FROM myTable WHERE Name = 'Andy''s Pub'; 

कारण आप, नहीं OR के साथ दोनों की स्थिति गठबंधन करना चाहिए, और AND है कि उपयोगकर्ता या तो एक ग्राहक का नाम दर्ज होगा या एक पंजीकरण संख्या (हमारे पास केवल एक टेक्स्टबॉक्स है)।

वैकल्पिक रूप से, आप जांच सकते हैं कि प्रवेश पंजीकरण संख्या की तरह स्वरूपित है या नहीं और उचित फ़िल्टर लागू करें। छद्म कोड में:

if (radTextBoxControl1.Text is formatted as reg_nr) { 
    view.RowFilter = "Reg_Number LIKE '%" + escapedText + "%'"; 
} else { 
    view.RowFilter = "Customer_Name LIKE '%" + escapedText + "%'"; 
} 
+0

वाह लगता है! यह एक संक्षिप्त उदाहरण है :) बहुत बहुत धन्यवाद :) – user2128912

2

यह काम करना चाहिए:

((DataTable)radGridView1.DataSource).DefaultView.RowFilter = 
    "Customer_Name like '%" + radTextBoxControl1.Text + "%' AND Reg_Number like '%" + radTextBoxControl1.Text + "%'"; 
+0

मैं इसे :) धन्यवाद की कोशिश की – user2128912

1

मुझे तुम्हारी जरूरत है या बजाय संचालन और "Customer_Name like '%" + radTextBoxControl1.Text + "%' OR Reg_Number like '%" + radTextBoxControl1.Text + "%'";

+0

आपको बहुत धन्यवाद :) – user2128912

संबंधित मुद्दे