2011-06-22 37 views
0

C#のDataViewRowFilterに割り当てる文字列に無効な文字をワイルドカードからエスケープする方法はありません。ルールはややDataview RowFilter無効な文字をエスケープする

If a column name contains any of these special characters ~ () # \/= > < + - * % & |^' " 

[ ], you must enclose the column name within square brackets [ ]. If a column name contains 

right bracket ] or backslash \, escape it with backslash (\] or \\). 

下に感謝:)

答えて

3

これは、もう少し詳細に概説仕様に基づいて動作しますが、here

protected void Page_Load(object sender, EventArgs e) 
{ 
    CheckValue("fefe[][]12#"); 
    CheckValue("abvds"); 
    CheckValue("#"); 
    CheckValue(@"[][][][][]\\\\\][]"); 
    CheckValue("^^^efewfew[[]"); 
} 

public static string CheckValue(string value) 
{ 
    StringBuilder sBuilder = new StringBuilder(value); 

    string pattern = @"([-\]\[<>\?\*\\\""/\|\~\(\)\#/=><+\%&\^\'])"; 

    Regex expression = new Regex(pattern); 

    if (expression.IsMatch(value)) 
    { 
     sBuilder.Replace(@"\", @"\\"); 
     sBuilder.Replace("]", @"\]"); 
     sBuilder.Insert(0, "["); 
     sBuilder.Append("]"); 
    } 
    return sBuilder.ToString(); 
} 

を発見されたように私は、WebページIにそれを投げましたあなたが望むようにPage_Loadともちろんテストを無視して見ていました。

希望に役立ちます。

+0

申し訳ありませんが、入力として以下のようなものを試しましたか? 'Status =' TRUE'' – Deeptechtons

+0

著者の質問をどのように理解したかに基づいて、正しいものでした。彼らが本当に望んだのは、最後の右括弧が名前の一部として追加された場合にエスケープされないことでした。この記事http://www.csharp-examples.net/dataview-rowfilter/は、私が彼らが望んでいたことをより良く理解する助けになりました。それを反映するようにコードを更新しました。 –

+0

クイックウォッチまたはウォッチウィンドウには、エスケープされた値が表示されます。テキストビジュアライザー上の拡大鏡をクリックすると、実際の出力が表示されます。 'TRUE'は['TRUE']のようになります。 –

関連する問題