Frage

Ich habe eine Datagridview mit mehreren Spalten und Zeilen. Die erste Spalte enthält eine Checkbox. Ich möchte der Benutzer mehrere Kontrollkästchen auswählen zu können und dann eine Aktion ausführen. Zum Beispiel, wenn sie wählen Kontrollkästchen in den Reihen 1 und 2, um die Daten aus anderen Spalten in den Zeilen 1 und 2 in eine messagebox ausgewählt und übergeben werden.

Ich weiß, ich brauche das checkbox_changed Ereignis zu verwenden, um dies zu tun. Allerdings Probleme Ich habe herauszufinden, wie diese für mehrere Zeilen zu tun?

War es hilfreich?

Lösung

Auf Schaltfläche Click-Ereignis zu tun:

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

Andere Tipps

Wenn Sie der Benutzer möchten auf eine Schaltfläche klicken, um die Aktion durchzuführen, dann, was Sie behandeln müssen, ist das Click-Ereignis der Schaltfläche, nicht die CheckBox Changed Ereignis ... Wenn die Schaltfläche geklickt wird, gehen Sie einfach durch alle Zeilen Ihres Datagridview und eine Aktion auf Zeilen mit einem überprüften Checkbox ausführen.

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

Ich glaube, Sie zu jedem Fall nicht brauchen i löste dieses Problem durch diesen 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

Ihre Ausgabe durch diesen Parameter:     ItemID -> 0 // Für Ungeprüfte Werte     ItemID -> 1 // Für Checked Werte

Jetzt können Sie die Zeilen filtern, die 1 als Wert für Ihre Aktion zurückkehren Getestet habe ich diesen Code und es für mich arbeiten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top