2017-06-27 76 views
0

我有一个连接到充满数据的BindingSource的DGrid。我正在尝试使用复选框为用户过滤出名为“状态”的特定列中的数据。我有四个复选框,因为同一列中有四个不同的数据文本(列在最右侧)。 Picture hereBindingSource过滤器 - 从字符串中删除单词

很显然,当用户选中/取消选中其中一个复选框时,它会设置一个过滤器到网格,以添加/删除列中的数据。

这里是我的代码,当复选框被选中的作品:

private void chkProgress_CheckedChanged(object sender, EventArgs e) 
    { 
     string filter = ""; 

     if (chkProgress.Checked) 
     { 

      filter = "Status LIKE '%Progress%'"; 

      if (chkPending.Checked) 
      { 
       filter += " Or Status LIKE '%Pending%'"; 
      } 
      else 
      { 

      } 

      if (chkCompleted.Checked) 
      { 
       filter += " Or Status LIKE '%Completed%'"; 
      } 
      else 
      { 

      } 

      if (chkArchived.Checked) 
      { 
       filter += " Or Status LIKE '%Archived%'"; 
      } 
      else 
      { 

      } 
     } 
     else 
     { 



     } 

     MessageBox.Show(filter); 
     bs.Filter = string.Format(filter); 
     refreshGrid(); 

    } 

    private void chkCompleted_CheckedChanged(object sender, EventArgs e) 
    { 
     string filter = ""; 

     if (chkCompleted.Checked) 
     { 

      filter = "Status LIKE '%Completed%'"; 

      if (chkPending.Checked) 
      { 
       filter += " Or Status LIKE '%Pending%'"; 
      } 
      else 
      { 

      } 

      if (chkProgress.Checked) 
      { 
       filter += " Or Status LIKE '%Progress%'"; 
      } 
      else 
      { 

      } 

      if (chkArchived.Checked) 
      { 
       filter += " Or Status LIKE '%Archived%'"; 
      } 
      else 
      { 

      } 
     } 
     else 
     { 



     } 

     MessageBox.Show(filter); 
     bs.Filter = string.Format(filter); 
     refreshGrid(); 
    } 

    private void chkArchived_CheckedChanged(object sender, EventArgs e) 
    { 
     if (chkArchived.Checked) 
     { 

     } 
     else 
     { 

     } 
    } 

    private void chkPending_CheckedChanged(object sender, EventArgs e) 
    { 

     string filter = ""; 

     if (chkPending.Checked) 
     { 

      filter = "Status LIKE '%Pending%'"; 

      if(chkProgress.Checked) 
      { 
       filter += " Or Status LIKE '%Progress%'"; 
      } 
      else 
      { 

      } 

      if(chkCompleted.Checked) 
      { 
       filter += " Or Status LIKE '%Completed%'"; 
      } 
      else 
      { 

      } 

      if(chkArchived.Checked) 
      { 
       filter += " Or Status LIKE '%Archived%'"; 
      } 
      else 
      { 

      } 
     } 
     else 
     { 


     } 

     MessageBox.Show(filter); 
     bs.Filter = string.Format(filter); 
     refreshGrid(); 
    } 

我怎么会去从字符串过滤器删除数据的时候都选中?类似于 - =?的东西

回答

0

这个怎么样:

if (chkPending.Checked) 
{ 
    filter += " Or Status LIKE '%Pending%'"; 
} 
else 
{ 
    filter = filter.Replace(" Or Status LIKE '%Pending%'", ""); 
} 
+0

干杯我已经使用这个看到我更新的问题。但有时它似乎并没有将字符串替换为无。它是间歇性的,每6次尝试就不会有1次。 – Zack

+0

尝试在替换行上添加一个断点,然后观察filter-var,直到它无法按预期工作。 –