DataGridView复选框列 - 值和功能

Dav*_*her 17 c# checkbox datagridview winforms

我在C#表单中为DataGridView添加了一个复选框列.该功能需要是动态的 - 您选择一个客户并显示他们可以维修的所有物品,并选择您希望这次服务中的哪一个.

无论如何,代码现在将添加一个chckbox到DGV的开头.我需要知道的是:

1)如何制作它以便默认"检查"整列?2)当我点击DGV下方的按钮时,如何确保仅从"已检查"行获取值?

这是插入列的代码:

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = "Include Dog";
            doWork.FalseValue = "0";
            doWork.TrueValue = "1";
            dataGridView1.Columns.Insert(0, doWork);
Run Code Online (Sandbox Code Playgroud)

接下来呢?任何帮助将不胜感激!

SwD*_*n81 39

  1. 没有办法直接这样做.将数据放入网格后,可以遍历行并检查每个框,如下所示:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells[CheckBoxColumn1.Name].Value = true;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. Click事件可能如下所示:

    private void button1_Click(object sender, EventArgs e)
    {
        List<DataGridViewRow> rows_with_checked_column = new List<DataGridViewRow>();
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (Convert.ToBoolean(row.Cells[CheckBoxColumn1.Name].Value) == true)
            {
                rows_with_checked_column.Add(row);
            }
        }
        // Do what you want with the check rows
    }
    
    Run Code Online (Sandbox Code Playgroud)


小智 15

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewCheckBoxCell ch1 = new DataGridViewCheckBoxCell();
    ch1 = (DataGridViewCheckBoxCell)dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0];

    if (ch1.Value == null)
        ch1.Value=false;
    switch (ch1.Value.ToString())
    {
        case "True":
            ch1.Value = false;
            break;
        case "False":
            ch1.Value = true;
            break;
    }
    MessageBox.Show(ch1.Value.ToString());
}
Run Code Online (Sandbox Code Playgroud)

查找datagridview中是否选中复选框的最佳解决方案.


and*_*zep 5

我花了很长时间才弄清楚如何做到这一点,而不必遍历所有记录。我有一个绑定的 datagridview-source,并且除复选框列之外的所有字段都已绑定。所以我没有/需要一个循环来添加每一行,并且我不想仅仅为此目的创建一个循环。所以经过多次尝试我终于得到了。实际上也很简单:

首先,使用自定义复选框单元格将新的 .cs 文件添加到项目中,例如

DataGridViewCheckboxCellFilter.cs:

using System.Windows.Forms;

namespace MyNamespace {
    public class DataGridViewCheckboxCellFilter : DataGridViewCheckBoxCell {
        public DataGridViewCheckboxCellFilter() : base() {
            this.FalseValue = 0;
            this.TrueValue = 1;
            this.Value = TrueValue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,在 GridView 上添加复选框列,您可以执行以下操作:

// add checkboxes
DataGridViewCheckBoxColumn col_chkbox = new DataGridViewCheckBoxColumn();
{
    col_chkbox.HeaderText = "X";
    col_chkbox.Name = "checked";
    col_chkbox.CellTemplate = new DataGridViewCheckboxCellFilter();                
}
this.Columns.Add(col_chkbox);
Run Code Online (Sandbox Code Playgroud)

就是这样!每次您的复选框添加到新行中时,它们都会被设置为 true。享受!