使用 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