6

textchangedイベントの下に行フィルターとしてテキストボックスを配置しようとしています!

以下のコードは、適切なReg_Number または Customer_Nameテキストボックスに入力されたものを取得するためにGRIDに使用されます。

ワットの驚くべき事実は、このコードは直接2番目の引数を取るということです

(すなわち)
((DataTable)radGridView1.DataSource).DefaultView.RowFilter = "Reg_Number like '%" + radTextBoxControl1.Text + "%'";

行を切り替えようとしましたが、私が何をしたとしても、最初の行を無視して2番目の行を取得します

ANDを入れて、両方を1行にまとめようとしましたが、btが機能しません、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) { }
}
4

3 に答える 3

7

これは、2番目の割り当てが最初の割り当てに置き換わるためです。

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ます

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

または、C#7.0以降、文字列補間を使用:

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 + "%'";
}
于 2013-03-03T13:58:51.667 に答える
2

これは機能するはずです:

((DataTable)radGridView1.DataSource).DefaultView.RowFilter =
    "Customer_Name like '%" + radTextBoxControl1.Text + "%' AND Reg_Number like '%" + radTextBoxControl1.Text + "%'";
于 2013-03-03T13:56:16.343 に答える
1

ANDの代わりにOR操作が必要だと思います"Customer_Name like '%" + radTextBoxControl1.Text + "%' OR Reg_Number like '%" + radTextBoxControl1.Text + "%'";

于 2013-03-03T14:01:09.520 に答える