使用 DataView 绑定 CheckListBoxControl






2.47/5 (9投票s)
2005年3月7日

64664
将 DataView 与 CheckListBoxControl 绑定。
引言
经过漫长的一天努力,终于让 DevExpress XtraGrid 与一个未绑定的 CheckBox 列一起工作,但代价是 UI 的一致性。 所以我不得不选择另一种方案... CheckedListBoxControl。
在使用 .NET 标准 CheckedListBoxControl 时,我找不到 DataSource、DisplayMember 和 ValueMember 这些属性。 这可能是因为使用了较旧的 .NET Framework。 所以,与其陷入麻烦,我决定使用 DevExpress CheckedListBoxControl。
以下是我为 CheckedListBoxControl 使用的通用方法的代码。 我想指出的是,我使用 DataView 作为 CheckedListBoxControl 的数据源,而不是简单的项目。 因此,.Items 属性在这里没有用处,但 .CheckedItems、.CheckedIndices 和 .ItemCount 属性却很有用。 .CheckedItems 返回所有复选框项目作为对象,而 .CheckedIndices 返回所有 .CheckState = "Checked" 项目的索引。 我使用这些索引作为 DataView 的 rowIndex 来从 DataView 中获取值。 因此,始终最好使用
foreach (int index in chkList.CheckedIndices)
 { ... = myDataRow[index].Row["FIELDNAME"].ToString(); ... }
来获取选中的值。
[C#]
#region CheckBox Generic Methods
public void SelectAll(DevExpress.XtraEditors.CheckedListBoxControl chkList) { 
    for(int i=0;i< chkList.ItemCount;i++) {
      chkList.SetItemChecked(i, true);
    }             
}
public void RemoveAll(DevExpress.XtraEditors.CheckedListBoxControl chkList) { 
    for(int i=0;i< chkList.ItemCount;i++) {
      chkList.SetItemChecked(i, false);  
    }       
}
public bool Checked(DataView dvSource, 
      DevExpress.XtraEditors.CheckedListBoxControl chkList, 
      string keyID, string fieldName) {
  bool stat = false;
  try{
    for (int i=0; i< dvSource.Count; i++ ) {
      if (dvSource[i].Row[fieldName].ToString()  == keyID) {
        chkList.SetItemChecked (i, true);
        stat = true;
        break;
      }
    }
  }
  catch(Exception ex){
    Code.ShowMessage(ex.ToString());
 }
 return stat;
}
public bool UnChecked(DataView dvSource, 
     DevExpress.XtraEditors.CheckedListBoxControl chkList, 
     string keyID, string fieldName) {
  bool stat = false;
  try{                      
    for (int i=0; i< dvSource.Count; i++ ) {
      if (dvSource[i].Row[fieldName].ToString() == keyID.ToString()) {
        chkList.SetItemChecked (i, false);
        stat = true;
        break;
      }
    }     
  }
  catch(Exception ex){
    Code.ShowMessage(ex.ToString());
  }
  return stat;
}
#endregion