如何在数据网格视图中默认选中复选框?

时间:2012-05-22 19:13:47

标签: c# datagridview checkbox

很高兴'Ellie在这里提出了Visual Studio 2010问题。

我在数据网格视图中有一个列只是一个复选框,除非用户专门取消检查,否则我希望它显示为已检查。我发现的唯一的事情是如何检查它是否只是一个独立的复选框。

提前感谢您的帮助!

埃利

3 个答案:

答案 0 :(得分:2)

遍历每一行并检查其各自的框,以便它显示为已选中(默认情况下)。

应该是这样的:

foreach (DataGridViewRow row in dataGridView.Rows)     
{
    row.Cells[CheckBoxColumn.Name].Value = true;     
} 

答案 1 :(得分:0)

如果要将DataGridView绑定到集合,则可以在对象上将boolean属性的默认值设置为true,将对象添加到BindingList集合,并将集合设置为DataGridView的数据源。

例如,绑定到DataGridView的集合将包含所需的属性(每个属性表示一列),包括用于表示复选框列的布尔属性。以下是该类的示例:

public class Product : INotifyPropertyChanged
{
    private bool _selected;
    private string _product;

    public event PropertyChangedEventHandler PropertyChanged;

    public Product(string product)
    {
        _selected = true;
        _product = product;
    }

    public bool Selected
    {
        get { return _selected; }
        set
        {
            _selected = value;
            this.NotifyPropertyChanged("Selected");
        }
    }

    public string ProductName
    {
        get { return _product; }
        set
        {
            _product = value;
            this.NotifyPropertyChanged("Product");
        }
    }


    private void NotifyPropertyChanged(string name)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

在包含DataGridView的表单中,您可以将项目添加到BindingList并将该集合绑定到DataGridView:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        InitGrid();
    }

    private void InitGrid()
    {
        dgProducts.AutoGenerateColumns = true;

        BindingList<Product> products = new BindingList<Product>();

        products.Add(new Product("Eggs"));
        products.Add(new Product("Milk"));
        products.Add(new Product("Bread"));
        products.Add(new Product("Butter"));

        dgProducts.DataSource = products;
    }

}

这只是一个快速而肮脏的示例,但展示了如何为对象设置默认值,将该对象添加到BindingList,然后将其添加到DataGridView。

要在列表绑定后添加项目,您始终可以访问DataSource集合并添加到它(下面的示例代码假定一个按钮已添加到表单并连接到下面显示的单击事件,以及一个文本框named,newItemName):

    private void addItemButton_Click(object sender, EventArgs e)
    {
        BindingList<Product> products = dgProducts.DataSource as BindingList<Product>;
        products.Add(new Product(newItemName.Text));
    }

答案 2 :(得分:0)

我现在遇到同样的问题 我的解决方案是,在我的dataGridView上使用一个事件 您只需获取当前行并将checkbox-column的null值替换为true或false。

    private void myDataGridView_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
    {
        // Get current row.
        DataGridViewRow obj = myDataGridView.CurrentRow;
        // Get the cell with the checkbox.
        DataGridViewCheckBoxCell oCell = obj.Cells[theIndexOfTheCheckboxColumn] as DataGridViewCheckBoxCell;
        // Check the value for null.
        if (oCell.Value.ToString().Equals(string.Empty))
            oCell.Value = true;
    }