Domanda

Ho un datagridview con più colonne e righe. La prima colonna contiene una casella di controllo. Voglio che l'utente sia in grado di selezionare più caselle di controllo e quindi eseguire un'azione. Ad esempio se selezionano caselle delle righe 1 e 2, i dati di altre colonne nelle righe 1 e 2 possono essere selezionati e passare in un messagebox.

Lo so ho bisogno di utilizzare l'evento checkbox_changed per fare questo. Tuttavia sto avendo problemi a lavorare fuori come fare questo per più righe?

È stato utile?

Soluzione

Il pulsante Click fare:

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

Altri suggerimenti

Se si desidera che l'utente a cliccare su un pulsante per eseguire l'azione, allora quello che ti serve per gestire è l'evento Click del pulsante, non il CheckBox cambiato evento ... Quando il pulsante viene premuto, basta passare attraverso tutti righe del DataGridView e eseguire un'azione sulle righe con una casella di controllo controllato.

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

Credo che non avete bisogno di qualsiasi evento Ho risolto questo problema da questo codice:

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

la vostra uscita da questo parametro:     ItemID -> 0 // Per valori non selezionati     ItemID -> 1 // Per Valori Controllato

Ora è possibile filtrare le righe che restituiscono 1 come valore per la vostra azione Ho provato questo codice e il lavoro per me

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top