2017-03-13 2 views
0

ich eine Checkbox zu verbergen, wenn die Zeile bestimmte Farbe ist,Datagridview zeigen eine Reihe nach ausgeblendete zurück

private void filter_color_CheckedChanged(object sender, EventArgs e) 
{ 
    foreach (DataGridViewRow item in mproductDataGridView.Rows) 
    { 
     if(item.DefaultCellStyle.BackColor != Color.Yellow) 
     { 
      CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[mproductDataGridView.DataSource]; 
      currencyManager1.SuspendBinding(); 
      item.Visible = false; 
      currencyManager1.ResumeBinding(); 

     } else 
     { 
      CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[mproductDataGridView.DataSource]; 
      currencyManager1.SuspendBinding(); 
      item.Visible = true; 
      currencyManager1.ResumeBinding(); 
     } 
    } 
} 

Die obige Funktion ist die Arbeit nur „item.Visible = false;“, ich will zurück zeigen, die versteckten Zeilen nach dem Deaktivieren des Kontrollkästchens, der Code nach else {funktioniert nicht, anyonw weiß, wie das geht?

+0

Können Sie 'Currency currencyManager1 = (Currency) Binding [mproductDataGridView.DataSource] ändern,' auf 'Currency currencyManager1 = (Currency) mproductDataGridView.BindingContext [mproductDataGridView.DataSource];' – Berkay

+0

verändert, ist das Ergebnis derselben – hkguile

+0

scheint die farbe ist immer noch gelb, so kann ich nicht einhüllen – hkguile

Antwort

0

Was ist damit?

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
     { 
      foreach (DataGridViewRow item in dataGridView1.Rows) 
      { 
       if (!checkBox1.Checked) 
       { 
        CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource]; 
        currencyManager1.SuspendBinding(); 
        item.Visible = dataGridView1.Rows[item.Index].DefaultCellStyle.BackColor == System.Drawing.Color.Yellow; 
        currencyManager1.ResumeBinding(); 

       } 
       else 
       { 
        CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource]; 
        currencyManager1.SuspendBinding(); 
        item.Visible = true; 
        currencyManager1.ResumeBinding(); 
       } 
      } 
     } 

Hoffnung hilft,

0

Wie die anderen Antworten darauf richtig heraus Sie nicht, wenn das Kontrollkästchen aktiviert ist, um zu sehen sind, zu überprüfen. Mit dem Kontrollkästchen als Umschaltfunktion habe ich die Filter- und Entfilterungslogik mit zwei Methoden getrennt.

private void filter_color_CheckedChanged2(object sender, EventArgs e) { 
    CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[mproductDataGridView.DataSource]; 
    currencyManager1.SuspendBinding(); 
    if (filter_color.Checked) 
    FilterRows(Color.Yellow); 
    else 
    UnFilterRows(); 
    currencyManager1.ResumeBinding(); 
} 

private void FilterRows(Color fColor) { 
    foreach (DataGridViewRow item in mproductDataGridView.Rows) { 
    if (!item.IsNewRow) { 
     if (item.DefaultCellStyle.BackColor != fColor) { 
     item.Visible = false; 
     } 
    } 
    } 
} 

private void UnFilterRows() { 
    foreach (DataGridViewRow item in mproductDataGridView.Rows) { 
    item.Visible = true; 
    } 
} 
Verwandte Themen