Question

J'ai un datagridview avec plusieurs colonnes et de lignes. La première colonne contient une case à cocher. Je veux que l'utilisateur pour pouvoir sélectionner plusieurs cases à cocher, puis effectuer une action. Par exemple, s'ils sélectionnent des cases à cocher dans les rangées 1 et 2, les données provenant d'autres colonnes dans les rangées 1 et 2 peuvent être sélectionnés et transmis dans un messagebox.

Je sais que je dois utiliser l'événement checkbox_changed pour ce faire. Cependant, je ne parviens pas à travailler sur la façon de le faire pour plusieurs lignes?

Était-ce utile?

La solution

événement sur le bouton Cliquez faire:

static int SelectColumnIndex = 0;
PerformAction_Click(object sender, System.EventArgs e)
{
    string data = string.Empty;
    foreach(DataGridViewRow row in MyDataGridView.Rows)
    {
      if(row.Cells[SelectColumnIndex].Value!=null &&
             Convert.ToBoolean(row.Cells[SelectColumnIndex].Value) == true)
      {
        foreach(DataGridViewCell cell in row.Cells)
        {
          if(cell.OwningColumn.Index!= SelectColumnIndex)
          {
            data+= (cell.Value + " ") ; // do some thing
          }
        }
        data+="\n";
      }
   }
   MessageBox.Show(data, "Data");
}

Autres conseils

Si vous voulez que l'utilisateur de cliquer sur un bouton pour effectuer l'action, alors ce que vous devez gérer est l'événement Click du bouton, pas changé CheckBox événement ... Lorsque le bouton est cliqué, juste passer par tous lignes de votre DataGridView et effectuer une action sur les lignes avec une case à cocher cochée.

static int SelectColumnIndex = 0;

PerformAction_Click(object sender, System.EventArgs e)
{
    string data = string.Empty;    

    foreach(DataGridViewRow row in MyDataGridView.Rows)     
    {
        if(row.Cells[SelectColumnIndex].Value != null 
            &&
         Convert.ToBoolean(row.Cells[SelectColumnIndex].Value) == true)       
        {
            foreach(DataGridViewCell cell in row.Cells)        
            {
                if (cell.OwningColumn.Index != SelectColumnIndex)                               
                {
                    data+= (cell.Value + " ") ; // do some thing           
                 }
            }

            data+="\n";
        }
    }

    MessageBox.Show(data, "Data");
}

Je pense que vous ne avez pas besoin de tout événement i résolu ce problème par ce code:

//In Fill DataGridViewEvent :
        DataGridViewCheckBoxColumn ChCol = new DataGridViewCheckBoxColumn();
        ChCol.Name = "CheckedRow";
        ChCol.HeaderText = "انتخاب";
        ChCol.Width = 50;
        ChCol.TrueValue = "1";
        ChCol.FalseValue = "0";
        dg.Columns.Insert(0, ChCol);

// In Button Event put these codes:

            try
            {
                MessageBox.Show(row.Cells[2].Value.ToString() + " --> " +
                row.Cells["CheckedRow"].Value.ToString());
            }
            catch
            {
                // Nothing Act
            }


enter code here

Votre sortie par ce paramètre:     ItemID -> 0 // Pour des valeurs non vérifiées     ItemID -> 1 // Pour les valeurs cochés

Vous pouvez maintenant filtrer les lignes qui retournent 1 comme valeur de votre action J'ai testé ce code et il travaille pour moi

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top