C# WinForm下DataGridView单元按钮列(二)

那就是当我们点击其中的单选或多选按钮时它的状态并不能发生变化,这是因为我们没有在click事件中改变按钮的选择状态。要实现这个功能,你需要给宿主DataGridView定义CellContentClick事件,并且判断当用户点击的是否为你所指定的控件,然后进行相应的处理。代码如下:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        DataGridViewColumn column = dataGridView1.Columns[e.ColumnIndex];

        if (column is DataGridViewCheckBoxColumn)
        {
            DataGridViewDisableCheckBoxCell cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewDisableCheckBoxCell;
            if (!cell.Enabled)
            {
                return;
            }
            if ((SelectedStatus)cell.Value == SelectedStatus.NoSelected)
            {
                cell.Value = SelectedStatus.Selected;
            }
            else if ((SelectedStatus)cell.Value == SelectedStatus.Selected)
            {
                cell.Value = SelectedStatus.Indeterminate;
            }
            else
            {
                cell.Value = SelectedStatus.NoSelected;
            }
        }
    }
}
       这个是CheckBox的,如果是RadioButton的话你还需要控制其它RadionButton的状态,这个时候就没有三种状态而是两种状态了,代码可以修改成这样:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex >= 0)
    {
        DataGridViewColumn column = dataGridView1.Columns[e.ColumnIndex];

        if (column is DataGridViewCheckBoxColumn)
        {
            DataGridViewDisableCheckBoxCell cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewDisableCheckBoxCell;
            if (!cell.Enabled)
            {
                return;
            }
            if ((SelectedStatus)cell.Value == SelectedStatus.NoSelected)
            {
                cell.Value = SelectedStatus.Selected;
                SetRadioButtonValue(cell);
            }
            else
            {
                cell.Value = SelectedStatus.NoSelected;
            }
        }
    }
}

private void SetRadioButtonValue(DataGridViewDisableCheckBoxCell cell)
{
    SelectedStatus status = (SelectedStatus)cell.Value;
    if (status == SelectedStatus.Selected)
    {
        status = SelectedStatus.NoSelected;
    }
    else
    {
        status = SelectedStatus.Selected;
    }
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        DataGridViewDisableCheckBoxCell cel = dataGridView1.Rows[i].Cells["checkbox"] as DataGridViewDisableCheckBoxCell;
        if (!cel.Equals(cell))
        {
            cel.Value = status;
        }
    }
}
      函数SetRadionButtonValue负责修改宿主DataGridView当前列中其它的RadionButton的状态。

      在完成这些工作后,一个相对完整的支持RadionButton或三种状态的CheckBox列的DataGridView界面就完成了,你可以根据需要在接下来的代码中来判断DataGridView中哪些行被选中了,或者哪些行处于未确定的选择状态(CheckBox的第三种状态),进而做出判断来完成后面的工作。

      最后我会提供整个工程供大家下载,其中也给出了DataGridViewLinkColumn列中的一些效果,如当鼠标指向超链接时显示一个ToolTip,当用户点击超链接时打开一个网页等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值