colonne de cases à cocher DataGridView - valeur et fonctionnalité

voix
17

J'ai ajouté une colonne de cases à cocher à un DataGridView sous ma forme de C #. La fonction doit être dynamique - vous sélectionnez un client et qui met en place tous les éléments qui pourraient être desservis, et vous sélectionner ceux que vous souhaitez être réparé cette fois.

Quoi qu'il en soit, le code va maintenant ajouter un chckbox au début de la DGV. Ce que je dois savoir est la suivante:

1) Comment puis-je faire en sorte que toute la colonne est « contrôlée » par défaut? 2) Comment puis-je assurer que je n'obtenir les valeurs des « checked » lignes lorsque je clique sur un bouton juste en dessous du DGV?

Voici le code pour obtenir la colonne insérée:

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = Include Dog;
            doWork.FalseValue = 0;
            doWork.TrueValue = 1;
            dataGridView1.Columns.Insert(0, doWork);

Quoi ensuite? Toute aide serait grandement appréciée!

Créé 06/08/2009 à 10:17
source utilisateur
Dans d'autres langues...                            


11 réponses

voix
37

  1. Il n'y a aucun moyen de le faire directement. Une fois que vous avez vos données dans la grille, vous pouvez parcourir les lignes et cocher chaque case comme ceci:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        row.Cells[CheckBoxColumn1.Name].Value = true;
    }
    
  2. L'événement Click pourrait ressembler à ceci:

    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
    }
    
Créé 06/08/2009 à 13:17
source utilisateur

voix
14
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());
}

meilleure solution pour trouver si la case dans la datagridview est cochée ou non.

Créé 29/08/2010 à 18:39
source utilisateur

voix
3

il m'a fallu beaucoup de temps pour comprendre comment faire cela sans avoir à boucle à travers tous les enregistrements. J'ai un datagridview source liée, et tous les champs, sont liées à l'exception de la case à cocher colonne. Donc, je n'ai pas / besoin d'une boucle pour ajouter chaque ligne et je ne voulais pas créer un juste pour ce purpuse. Donc, après beaucoup d'essayer, je l'ai finalement obtenu. Et il est en fait très simple aussi:

D'abord, vous ajoutez un nouveau fichier .cs à votre projet avec une cellule sur mesure case à cocher, par exemple

DataGridViewCheckboxCellFilter.cs:

using System.Windows.Forms;

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

Après cela, sur votre GridView, où vous ajoutez la case-colonne, vous faites:

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

Et c'est tout! Chaque fois que vos cases à cocher sont ajoutés dans une nouvelle ligne, ils vont mettre à true. Prendre plaisir!

Créé 23/05/2011 à 00:35
source utilisateur

voix
4

Voici une réponse d'une doublure pour cette question

List<DataGridViewRow> list = DataGridView1.Rows.Cast<DataGridViewRow>().Where(k => Convert.ToBoolean(k.Cells[CheckBoxColumn1.Name].Value) == true).ToList();
Créé 24/01/2012 à 07:37
source utilisateur

voix
1

Si vous avez un gridview contenant plus d'une case à cocher .... vous devriez essayer ....

Object[] o=new Object[6];

for (int i = 0; i < dgverlist.RowCount; i++)
{
    for (int j = 2; j < dgverlist.ColumnCount; j++)
    {
        DataGridViewCheckBoxCell ch1 = new DataGridViewCheckBoxCell();
        ch1 = (DataGridViewCheckBoxCell)dgverlist.Rows[i].Cells[j];

        if (ch1.Value != null)
        {
           o[i] = ch1.OwningColumn.HeaderText.ToString();

            MessageBox.Show(o[i].ToString());
        }
    }
}
Créé 16/02/2012 à 07:29
source utilisateur

voix
3

Si vous essayez sur l' CellContentClickévénement

Utilisation:

dataGridView1.EndEdit();  //Stop editing of cell.
MessageBox.Show("0 = " + dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString());
Créé 03/10/2012 à 15:24
source utilisateur

voix
0

Pour tester si la colonne est cochée ou non:

for (int i = 0; i < dgvName.Rows.Count; i++)
{
    if ((bool)dgvName.Rows[i].Cells[8].Value)
    {
    // Column is checked
    }
}
Créé 12/01/2013 à 07:25
source utilisateur

voix
1

1) Comment puis-je faire en sorte que toute la colonne est « contrôlée » par défaut?

var doWork = new DataGridViewCheckBoxColumn();
doWork.Name = "IncludeDog" //Added so you can find the column in a row
doWork.HeaderText = "Include Dog";
doWork.FalseValue = "0";
doWork.TrueValue = "1";

//Make the default checked
doWork.CellTemplate.Value = true;
doWork.CellTemplate.Style.NullValue = true;

dataGridView1.Columns.Insert(0, doWork);

2) Comment puis-je assurer que je n'obtenir les valeurs des « checked » lignes?

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (row.IsNewRow) continue;//If editing is enabled, skip the new row

    //The Cell's Value gets it wrong with the true default, it will return         
    //false until the cell changes so use FormattedValue instead.
    if (Convert.ToBoolean(row.Cells["IncludeDog"].FormattedValue))
    {
        //Do stuff with row
    }
}
Créé 30/10/2014 à 05:31
source utilisateur

voix
0

si u faire cette colonne dans la base de données SQL (bits) en tant que type de données u devrait modifier ce code

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

avec ça

DataGridViewCheckBoxColumn doWork = new DataGridViewCheckBoxColumn();
            doWork.HeaderText = "Include Dog";
            doWork.FalseValue = "False";
            doWork.TrueValue = "True";
            dataGridView1.Columns.Insert(0, doWork);
Créé 01/06/2016 à 23:10
source utilisateur

voix
0

Il est assez simple

DataGridViewCheckBoxCell checkedCell = (DataGridViewCheckBoxCell) grdData.Rows[e.RowIndex].Cells["grdChkEnable"];

                bool isEnabled = false;
                if (checkedCell.AccessibilityObject.State.HasFlag(AccessibleStates.Checked))
                {
                    isEnabled = true;
                }
if(isEnabled)
 {
   // do your business process;
 }
Créé 30/06/2019 à 09:40
source utilisateur

voix
0

Si votre colonne a déjà été créé en raison de la liaison avec une recordset de type BIT, le type de la colonne sera le texte de toute façon. La solution que j'ai trouvé est de supprimer cette colonne et le remplacer par un « DataGridViewCheckBoxColumn » ayant les mêmes données de liaison.

            DataGridViewColumn oldCol = dgViewCategory.Columns["mycolumn"];
            int chkIdx = oldCol.Index;
            DataGridViewCheckBoxColumn chkCol = new DataGridViewCheckBoxColumn();
            chkCol.HeaderText = oldCol.HeaderText;
            chkCol.FalseValue = "False";
            chkCol.TrueValue = "True";
            chkCol.DataPropertyName = oldCol.DataPropertyName;
            chkCol.Name = oldCol.Name;
            dgViewCategory.Columns.RemoveAt(chkIdx);
            dgViewCategory.Columns.Insert(chkIdx, chkCol);
Créé 15/07/2019 à 17:25
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more