¿Cómo hago que una casilla de verificación esté marcada de forma predeterminada en una vista de cuadrícula de datos?

Buena vieja Ellie aquí con una pregunta de Visual Studio 2010.

Tengo una columna en una vista de cuadrícula de datos que es solo una casilla de verificación y me gustaría que aparezca marcada a menos que el usuario la desmarque específicamente. Lo único que he encontrado es cómo marcarlo si es solo una casilla de verificación independiente.

¡Gracias de antemano por la ayuda!

Ellie

preguntado el 22 de mayo de 12 a las 20:05

3 Respuestas

Recorra cada fila y marque su casilla respectiva para que aparezca marcada (por defecto).

Debería ser algo como esto:

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

contestado el 22 de mayo de 12 a las 20:05

Si vincula DataGridView a una colección, puede establecer el valor predeterminado de la propiedad booleana en verdadero en el objeto, agregar el objeto a la colección BindingList y establecer la colección en el origen de datos de DataGridView.

Por ejemplo, la colección para vincular a DataGridView contendría las propiedades necesarias (cada propiedad representa una columna), incluida una propiedad booleana para representar la columna de casilla de verificación. Aquí hay un ejemplo de cómo se vería la clase:

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));
    }
}

Dentro del formulario que contiene DataGridView, puede agregar sus elementos a BindingList y vincular esa colección a 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;
    }

}

Este es solo un ejemplo rápido y sucio, pero muestra cómo puede establecer valores predeterminados para un objeto, agregar ese objeto a BindingList y luego agregarlo a DataGridView.

Para agregar elementos después de vincular la lista, siempre puede acceder a la colección DataSource y agregarla (el código de ejemplo a continuación asume que se agrega un botón al formulario y se conecta al evento de clic que se muestra a continuación, así como un cuadro de texto llamado newItemName ):

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

contestado el 22 de mayo de 12 a las 20:05

Tuve el mismo problema en este momento.
Mi solución es usar un evento en mi dataGridView.
Simplemente obtiene la fila actual y reemplaza el valor nulo de su columna de casilla de verificación con verdadero o falso.

    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;
    }

Respondido 12 Jul 17, 14:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.