none
[!0-9]*のような表現で、DataGridViewをフィルタリングできないか RRS feed

  • 質問

  • DataGridViewの内容をフィルタしたい場合、DataviewオブジェクトのRowFilterプロパティに

    条件式を指定する方法が一般的なようですが、次のような条件式は仕様にないらしく、エラーが発生しました。

    " Field like '[!0-9]*' "  (0~9以外の文字で始まる文字列)

    このような書き方は、AccessにおけるRecordset.Filterプロパティでは可能で、これまで頻用していました。

    VBで、DataGridviewのデータセットを、[!0-9]* のような条件でフィルタリングする方法はあるでしょうか。

     

    2010年12月31日 11:51

回答

  • RowFilterではそのような指定はできません。

    DataColumn.Expression プロパティ (System.Data)

    LINQを使えば可能です。

    using System;
    using System.Data;
    using System.Linq;
    using System.Text.RegularExpressions;
    
    namespace RegularExpression {
      class Program {
        static void Main(string[] args) {
          DataTable dt = new DataTable();
          dt.Columns.Add("col1", typeof(string));
          dt.Rows.Add("1hoge");
          dt.Rows.Add("2fuga");
          dt.Rows.Add("hoge");
          dt.Rows.Add("fuga");
    
          var query = from DataRowView rowView in dt.DefaultView
                where Regex.IsMatch((string) rowView[0], "^[^\\d]")
                select rowView;
    
          foreach (DataRowView rowView in query) {
            Console.WriteLine(rowView[0]); // hoge,fuga
          } 
        }
      }
    }
    

    C#なので、VBに読み替えてください。 


    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
    • 回答としてマーク kyrie_yohei 2011年1月1日 6:21
    2010年12月31日 13:02

すべての返信

  • RowFilterではそのような指定はできません。

    DataColumn.Expression プロパティ (System.Data)

    LINQを使えば可能です。

    using System;
    using System.Data;
    using System.Linq;
    using System.Text.RegularExpressions;
    
    namespace RegularExpression {
      class Program {
        static void Main(string[] args) {
          DataTable dt = new DataTable();
          dt.Columns.Add("col1", typeof(string));
          dt.Rows.Add("1hoge");
          dt.Rows.Add("2fuga");
          dt.Rows.Add("hoge");
          dt.Rows.Add("fuga");
    
          var query = from DataRowView rowView in dt.DefaultView
                where Regex.IsMatch((string) rowView[0], "^[^\\d]")
                select rowView;
    
          foreach (DataRowView rowView in query) {
            Console.WriteLine(rowView[0]); // hoge,fuga
          } 
        }
      }
    }
    

    C#なので、VBに読み替えてください。 


    Blog:プログラマーな日々 http://d.hatena.ne.jp/JHashimoto/
    • 回答としてマーク kyrie_yohei 2011年1月1日 6:21
    2010年12月31日 13:02
  • ご返信、ありがとうございました。

    LINQについて勉強してみます。

     

    2011年1月1日 6:24