GridView利⽤CheckBox复选框列实现单选功能
⾃Dev13.2开始,GridView提供了⾃带的复选框列,该功能能实现多选操作,⽅便了不少,那如果想把这个⾃带的复选框列做成单选,那
就需要单独处理了。
先补充⼀下,GridView的复选框列怎么设置,如下代码⽚段,只要设置前⾯两个属性即可在GridView看到有⼀列复选框(BandedGridView较⽼版本不⽀持这个功能,应该得在19.2或者20之后的版本才⽀持,具体可以看看⾃⼰的版本,如果设置⽆效,那么说明不⽀持):
//设置显⽰复选框列
gridview.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
gridview.OptionsSelection.MultiSelect = true;
gridview.OptionsSelection.CheckBoxSelectorColumnWidth = 45;//设置复选框列的宽度
了解如何显⽰复选框列,那么想实现单选的功能就需要检测选择操作时候对其他⾏的CheckBox进⾏取消选择,GridView提供了⼀个SelectionChanged事件,我们只需要在这个事件监听这个操作,每次触发的时候清除所有选择⾏(gridView.ClearSelection())然后再选择当前⾏即可,直接上代码:
/// <summary>
/// 设置GridView单选
/// </summary>
/// <param name="view"></param>
/// <param name="selectCaption"></param>
public static void SetGridViewSingleSelect(DevExpress.XtraGrid.Views.Grid.GridView view,string selectCaption="选择")
{
if (view == null) return;
/
/设置显⽰复选框列
view.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
view.OptionsSelection.MultiSelect = true;
view.OptionsSelection.CheckBoxSelectorColumnWidth = 45;
view.OptionsSelection.ShowCheckBoxSelectorInColumnHeader = DevExpress.Utils.DefaultBoolean.False;//列标题不显⽰CheckBox,控制不能全选            //
var selectCol=view.VisibleColumns[0];
if(selectCol.FieldName== "DX$CheckboxSelectorColumn")
{
selectCol.Caption = selectCaption;
}
view.SelectionChanged += onSelectChanged;
void onSelectChanged(object sender , DevExpress.Data.SelectionChangedEventArgs e)
{
//注销事件,防⽌以下操作反复触发该事件
view.SelectionChanged -= onSelectChanged;
//清除所有选择
view.ClearSelection();
if (e.Action == CollectionChangeAction.Add)//选中
{
view.SelectRow(e.ControllerRow);
}
else if (e.Action == CollectionChangeAction.Remove)//取消选中
{
view.UnselectRow(e.ControllerRow);
}
view.SelectionChanged += onSelectChanged;
}
}
如果需求是不可以允许不选的话,不需要代码中的两个条件语句,直接view.ClearSelection()后调⽤view.SelectRow(e.ControllerRow)
即可。
⽰例、代码如下:
public Form1()
{
InitializeComponent();
SetGridViewSingleSelect(gridView1);            gridControl1.DataSource = CreateDt();        }
DataTable CreateDt()
gridview不显示
{
var dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("name");
for (int i = 0; i < 20; i++)
{
dt.Rows.Add(i, "name" + i);
}
return dt;
}
结果演⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。