2013-03-03 6 views
5

textchangedをtextchangedイベントの下にRowfilterとして配置しようとしています!行フィルタの複数のパラメータ

次のコードは、テキストボックスに入力され、適切なReg_NumberまたはCustomer_Nameを取得するためにグリッドに使用されています!

ワットは驚くべき事実だで、このコードは直接
((DataTable)radGridView1.DataSource).DefaultView.RowFilter = "Reg_Number like '%" + radTextBoxControl1.Text + "%'";

はラインを切り替えるしようとしましたが、関係なく、私が何をしたか、それは第一1を無視していないし、第二引数

(IE)を取ります

私は1つの行に両方を取得しようとしましたが、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) { } 
} 

答えて

6

これにより、第2の割り当てを置き換えているため、最初の1

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

あなたは論理的に2つのフィルタを組み合わせる必要がありますORの結果、両方の履行を取得します条件:

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と明確になる:

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

や、文字列の補間で:

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

また、2つの単一引用符で単一引用符を交換してください。これは、引用符を含むようにSQL文字列を有効にし、SQL-注射を防ぐ:

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

あなたはORで両方の条件を組み合わせて、そしてないANDしなければならない理由は、ユーザがいずれか顧客名を入力することであり、 または登録番号(テキストボックスは1つしかありません)。

また、エントリが登録番号のようにフォーマットされているかどうかを確認し、適切なフィルタを適用することもできます。擬似コードで:

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

うわーと思います!これは簡単な例です:)ありがとうalot :) – 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

関連する問題