2013-03-03 23 views
5

Metin kutusu etkinliğinde, bir metin kutusunu Rowfilter olarak yerleştirmeye çalışıyorum!Satır Filtresinde birden çok parametre

Aşağıdaki kod metin kutusuna girilir uygun Reg_NumberveyaCustomer_Name almak için GRID için kullanılır!

wat şaşırtıcı gerçeği bu kod doğrudan ((DataTable)radGridView1.DataSource).DefaultView.RowFilter = "Reg_Number like '%" + radTextBoxControl1.Text + "%'";

hatları geçiş çalıştı 2 Argüman

(yani)
alır, ama ne olursa olsun ben yaptığın şeyin 1 tane yok sayar ve 2

'u, AND'yi tek bir satırda almayı denedim, bt din't, plz hel me frnzz!

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) { } 
} 

cevap

6

Bu ikinci atama yerini çünkü İlki

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

Bir mantıksal ile 2 filtreleri birleştirmek gerekir VEYA sonuçları hem yerine almak koşullar:

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 + "%'"; 

O String.Format daha açık bir şekilde:

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

ya, 7.0 C# beri dize interpolasyonlu:

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

Ayrıca iki tek tırnak tek tırnak yerine emin olun.

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

Kullanıcı ya bir müşteri adını gireceği, AND olduğunu OR ile iki koşulu birleştirmek ve olmamalıdır nedeni: Bu SQL enjeksiyonu tırnak içerecek şekilde SQL dizesi sağlayan ve engeller veya bir kayıt numarası (sadece bir metin kutumuz var). Alternatif olarak, girişin bir kayıt numarası gibi biçimlendirilip biçimlendirilmediğini ve uygun filtreyi uygulayıp uygulamadığını kontrol edebilirsiniz. Sözde kodda:

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

vay düşünüyorum! Bu kısa bir örnektir :) Teşekkürler çok :) – user2128912

2

Bu çalışması gerekir:

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

ben teşekkür ederim :) denedim – user2128912

1

Sana ihtiyacım VEYA yerine operasyon VE "Customer_Name like '%" + radTextBoxControl1.Text + "%' OR Reg_Number like '%" + radTextBoxControl1.Text + "%'";

+0

Çok teşekkür ederim :) – user2128912

İlgili konular