2009-06-04 4 views
0

私のコードは以下の通りです。strFilterTextに値があり、文字列が空であればコードは正しくありませんたとえば、strFilterTextに "shoes"が含まれている場合、データグリッドには "shoes"を含むすべての行が表示されますが、カテゴリがない行、つまりcatergoryがNULLでstrFilterTextに " ""でカテゴリー内のすべてを返すようにしたいのですが、下のコードは、strFilterTextが ""の場合、カテゴリのすべてを私に示しています。C#LIKEを使用してセル値がNULLでないデータグリッドからローを削除する

ありがとうございました。

strFilterText += " LIKE '%" + txtboxValue.Text + "%'"; 
    performFilter(strFilterText); 
} 

private void performFilter(string strFilterText) 
{ 
     DataTable table = dataGridView1.DataSource as DataTable; 
     if (table != null) 
     { 
      List<DataRow> filteredRows = new List<DataRow>(table.Select(strFilterText)); 

      CurrencyManager cm = (CurrencyManager)BindingContext[dataGridView1.DataSource]; 
      cm.SuspendBinding(); 
      foreach (DataGridViewRow row in dataGridView1.Rows) 
      { 
       row.Visible = filteredRows.Contains(((DataRowView)row.DataBoundItem).Row); 
      } 
      cm.ResumeBinding(); 
     } 
} 

答えて

0

てみてください最初の行を変更する:

strFilterText+= string.IsNullOrEmpty(txtboxValue.Text)? " IS NULL" : " LIKE '%" + txtboxValue.Text + "%'"; 
+0

これに行ってしまったのですが、フィールドに真のヌル値ではなく空の文字列が含まれているように聞こえました。 –

+0

ええ、それは本当に明確ではない値はnullまたは ""です。私は彼が今でも管理すると確信しています。 – Grzenio

+0

両方の回答はうまくいきましたが、これは私が同行したものです.Granzenioに感謝します! –

0

DataGridViewのデータソースとしてBindingSourceを使用することを検討しましたか?これには "Filter"という名前のプロパティが含まれており、フィルタ文字列を割り当てることができます。

ただし、strFilterTextを変更する必要があります。フィルタリングするには、FieldName IS NULLを使用する必要があります。あなたは同様にあなたのコードでこれを試してみたいことがあります - それは... table.Selectのために働くかもしれない

0

フィールドが空の場合は異なり、あなたのフィルタテキストを設定してみてください:

strFilter += String.IsNullOrEmpty(txtboxValue.Text) ? " = ''" : " LIKE '%" + txtboxValue.Text + "%'"; 
0

すると、このいただきありがとうございます、それは私のため

CurrencyManager cm = (CurrencyManager)BindingContext[dataGridView1.DataSource]; 
cm.SuspendBinding(); 
foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    row.Visible = filteredRows.Contains(((DataRowView)row.DataBoundItem).Row); 
} 
cm.ResumeBinding(); 
を別の問題を解決しました3210
+0

コードブロックにコードを追加します。 –

関連する問題