C# 程序中全选复选框的使用
这里只整理了全选复选框和GridControl、全选复选框和CheckedListBox的组合实现
1 #region 全选状态控制 2 private void clbcTemp_ItemCheck(object sender, DevExpress.XtraEditors.Controls.ItemCheckEventArgs e) 3 { 4 //当复选框的tag属性为空时,列表中所有复选框勾选,改变全选复选框的状态,避免因改变全选复选框引起的 5 //列表复选框的状态改变对全选复选框的影响 6 if (clbcTemp.CheckedItems.Count == clbcTemp.ItemCount && ceCheckAll.Tag == null) 7 { 8 ceCheckAll.Tag = true; 9 ceCheckAll.Checked = true; 10 } 11 else 12 { 13 if (!ceCheckAll.Checked) 14 { 15 ceCheckAll.Tag = true; 16 ceCheckAll.Checked = false; 17 } 18 } 19 } 20 21 private void ceCheckAll_CheckedChanged(object sender, EventArgs e) 22 { 23 //判断是由手动改变全选复选框的值引起的状态改变, 24 //还是由点击列表中的复选框引起的状态改变,如果是由列表中引起的tag属性为true,返回 25 if (ceCheckAll.Tag != null && (bool)ceCheckAll.Tag) 26 { 27 ceCheckAll.Tag = null; 28 return; 29 } 30 ceCheckAll.Tag = false; 31 for (int i = 0; i < clbcTemp.ItemCount; i++) 32 { 33 clbcTemp.SetItemChecked(i, false); 34 clbcTemp.SetItemChecked(i, ceCheckAll.Checked); 35 } 36 ceCheckAll.Tag = null; 37 }
1 //全选按钮的状态改变事件 2 //如果控件的tag值为true表示由gridview的值改变引发的全选,不进行任何处理 3 //如果手动改变控件的值,控件的tag置为false 4 private void ceCheckAll_CheckedChanged(object sender, EventArgs e) 5 { 6 if (ceCheckAll.Tag != null && (bool)ceCheckAll.Tag) 7 { 8 ceCheckAll.Tag = null; 9 return; 10 } 11 ceCheckAll.Tag = false; 12 for (int i = 0; i < viewSrch.DataRowCount; i++) 13 { 14 viewSrch.SetRowCellValue(i, "选择", false); 15 viewSrch.SetRowCellValue(i, "选择", ceCheckAll.Checked); 16 } 17 ceCheckAll.Tag = null; 18 } 19 //当数据行的选中状态发生改变时,判断所有的数据行是否被选中 20 //如果被选中将全选复选框置为true反之为FALSE 21 private void SetCheckAllState(GridView view) 22 { 23 bool temp = (view.DataRowCount != 0); 24 for (int i = 0; i < view.DataRowCount; i++) 25 { 26 if (!(bool)view.GetRowCellValue(i, view.Columns[0])) 27 { 28 temp = false; 29 break; 30 } 31 } 32 if (!temp && ceCheckAll.Checked) 33 { 34 ceCheckAll.Tag = true; 35 ceCheckAll.Checked = false; 36 } 37 if (temp && !ceCheckAll.Checked) 38 { 39 ceCheckAll.Tag = true; 40 ceCheckAll.Checked = true; 41 } 42 } 43 //如果全选框的tag值为FALSE,说明改变全选框的值引发的事件,不进行处理 44 private void viewSrch_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e) 45 { 46 if (e.Column == viewSrch.Columns["选择"]) 47 { 48 if (ceCheckAll.Tag != null && !(bool)ceCheckAll.Tag) 49 return; 50 SetCheckAllState(viewSrch); 51 } 52 }