在使用DotNetBar控件SuperGridControl时发现并不能像 Dev中 GridControl控件存在表头自带单选框于是就有了今天的下文:
对SuperGridControl控件进行封装便于以后的使用
——小码哈
/// <summary>
/// SuperGridControl 单选/全选支持扩展类
/// </summary>
public class SgcCheckBoxXControl
{
/// <summary>
/// 将CheckBoxX添加到SuerGridControl表头
/// </summary>
/// <param name="headerCheckBoxX">SuperGridControl控件上表头需要添加的复选框</param>
/// <param name="sgcCheckBoxXColumn">SuerGridControl控件中的复选框列</param>
/// <param name="sgc">需要添加复选框的SuperGridControl控件</param>
public static void SuperGridControlBindCheckBoxX(CheckBoxX headerCheckBoxX, GridColumn sgcCheckBoxXColumn, SuperGridControl sgc)
{
try
{
headerCheckBoxX.Size = new Size(15, 15);
sgc.Controls.Add(headerCheckBoxX);
sgcCheckBoxXColumn.MinimumWidth = 50;
sgcCheckBoxXColumn.ColumnSortMode = ColumnSortMode.None;
headerCheckBoxX.CheckedChanged += (s, e) =>
{
HeaderCheckBoxXCheckedChanged((CheckBoxX)s, sgcCheckBoxXColumn, sgc);
};
sgc.ColumnResized += (s, e) =>
{
CheckBoxXLocation(headerCheckBoxX, e, sgcCheckBoxXColumn);
};
}
catch (Exception ex)
{
string errorMsg = $"SuperGridControl绑定CheckBoxX时发生错误!\r\n错误信息:{ex.Message}";
MessageBox.Show(errorMsg, "异常信息:", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// 获取SuperGridControl控件中CheckBoxX.Checked为True的数据
/// </summary>
/// <param name="sgc">包含CheckBoxX控件的SuperGridControl</param>
/// <param name="sgcCheckBoxXColumn">SuperGridControl控件中的CheckBoxX列</param>
/// <returns>CheckBoxX.Checked的数据</returns>
public static List<GridRow> GetCheckedRowsList(SuperGridControl sgc, GridColumn sgcCheckBoxXColumn)
{
try
{
List<GridRow> gridRowList = new List<GridRow>();
foreach (GridRow Row in sgc.PrimaryGrid.Rows)
{
if (Convert.ToBoolean(Row.Cells[sgcCheckBoxXColumn.Name].Value) != true) continue;
gridRowList.Add(Row);
}
return gridRowList;
}
catch (Exception ex)
{
string errorMsg = $"在获取已选中复选框行数据时发生错误!\r\n错误信息:{ex.Message}";
MessageBox.Show(errorMsg, "异常信息:", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
}
/// <summary>
/// 复选框全选/取消全选事件
/// </summary>
/// <param name="checkBoxX">SuperGridControl复选框列列头控件</param>
/// <param name="sgcCheckBoxXColumn">SuperGirdControl控件复选框列</param>
/// <param name="sgc">SuperGridControl控件</param>
public static void HeaderCheckBoxXCheckedChanged(CheckBoxX checkBoxX, GridColumn sgcCheckBoxXColumn, SuperGridControl sgc)
{
try
{
foreach (GridRow Row in sgc.PrimaryGrid.Rows)
{
Row.Cells[sgcCheckBoxXColumn.Name].Value = checkBoxX.Checked;
}
sgc.Refresh();
}
catch (Exception ex)
{
string errorMsg = $"复选框全选/取消全选时发生错误!\r\n错误信息:{ex.Message}";
MessageBox.Show(errorMsg, "异常信息:", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
/// <summary>
/// Checkbox位置定位
/// </summary>
/// <param name="checkBoxX">SuperGridControl表头CheckBoxX控件</param>
/// <param name="gridColumnEventArgs"></param>
/// <param name="sgcCheckBoxXColumn">SuperGridControl控件复选框列</param>
private static void CheckBoxXLocation(CheckBoxX checkBoxX, GridColumnEventArgs gridColumnEventArgs, GridColumn sgcCheckBoxXColumn)
{
try
{
if (checkBoxX == null) return;
Point point = new Point();
point.X = sgcCheckBoxXColumn.BoundsRelative.X + (sgcCheckBoxXColumn.Size.Width - checkBoxX.Width) / 2;
point.Y = (gridColumnEventArgs.GridPanel.GroupHeaderHeight - checkBoxX.Height) / 2;
checkBoxX.Location = point;
}
catch (Exception ex)
{
string errorMsg = $"SuperGridControl控件[ {sgcCheckBoxXColumn.Name} ]列表头在重绘复选框[ {checkBoxX.Name} ]位置时发生错误!\r\n" +
$"错误信息:{ex.Message}";
MessageBox.Show(errorMsg, @"异常信息:", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}