2016-02-24 46 views
0

我有一個名爲bList的BindingList,它正在GUI中使用。迭代綁定列表以查找屬性

public BindingList<SomeList> bList = new BindingList<SomeList>(); 

我想要做的是通過檢查bList中的屬性來改變RowStyle事件。比方說,在bList中,我有6個具有多個屬性的對象。 bList中的一個屬性叫做isValid,它是一個bool,如果設置爲false,我將該行變爲紅色,否則該行將保持默認顏色。

如果它們是>= 0,我能夠使所有行變成紅色。如何遍歷bList以查找blist中每個對象的屬性isValid

private void gridView_RowStyle(object sender, RowStyleIEventArgs e) 
{ 
    bool isValid = class.bList[0].isValid; 

    if (e.RowHandle >= 0) 
    { 
     if (isValid == false) 
     { 
      e.Appearance.BackColor = Color.Red; 
     } 
    } 
} 
+0

*屬性*將成爲列表*包含的對象的成員*不是列表本身。如果你想讓控件知道list * items的變化,那麼這個類將需要實現'INotifyPropertyChanged' – Plutonix

+0

謝謝,我很難弄清楚如何迭代BindingList,因爲我不能利用它整個列表中的「foreach」。 – camerajunkie

+0

控件是DGV,它是否使用BindingList作爲數據源? – Plutonix

回答

1

您應該使用反射來獲取對象的屬性值。這裏是一個示例函數,它可以用於通用的BindingList。

用途:

for (int i = 0; i < myList.Count; i++) 
    { 
     object val = null; 
     TryGetPropertyValue<SomeType>(myList, i, "isValid", out val); 
     bool isValid = Convert.ToBoolean(val); 
     // Process logic for isValid value 
    } 

方法:

static private bool TryGetPropertyValue<T>(BindingList<T> bindingList, int classIndex, string propertyName, out object val) 
    where T : class 
    { 
     try 
     { 
      Type type = typeof(T); 
      PropertyInfo propertyInfo = type.GetProperty(propertyName); 

      val = propertyInfo.GetValue(bindingList[classIndex], null); 

      return val != null; // return true if val is not null and false if it is 
     } 
     catch (Exception ex) 
     { 
      // do something with the exception 
      val = null; 

      return false; 
     } 
    } 
1

爲了改變基於屬性值的行的顏色,你應該增加該屬性爲隱藏列,然後使用該單元格的值來設置樣式。

請參閱以下內容: How to change a row style based on a column value

對於您的問題:

private void gridView_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) 
{ 
    string valid = gridView.GetRowCellValue(e.RowHandle, "isValid").ToString().ToLower(); 
    if(valid == "true") 
     e.Appearance.BackColor = Color.Red; 
} 

要添加一個隱藏的列: Hide Column in GridView but still grab the values

0

我現在可以遍歷BindingList bList因爲我有繼承的其他問題試圖找出迭代器的類型。

foreach (SomeType item in bList) 
{ 
    if (e.RowHandle >= 0) 
    { 
      if (instance.isValid == false) 
      { 
       e.Appearance.BackColor = Color.Red; 
      } 
      else 
      { 
       e.Appearance.BackColor = Color.White; 
      } 
    } 
} 

爲什麼所有的行仍變紅,即使我發現它與物業isValid正在返回false對象。