首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> C# >> 正文

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,当用户点击超链接时打开一个网页等。

上一页  [1] [2] 

【责编:Luzi】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·算法分析与设计之五大常用算法
 ·开发必备 漫谈Java加密保护
 ·嵌入式开发--ARM技术专题
 ·C/C++指针,认真了解,灵活运用
 ·.NET开发:C#实用基础教程
 ·软件测试工具QTP学习专题
 ·嵌入式开发单片机解决方案专题
 ·Java开发环境 Greenfoot 程序员手册
 ·C++对象布局及多态实现的探索
 ·常见排序算法的实现
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航