Pergunta

Eu tenho um datagridview com várias colunas e linhas. A primeira coluna contém uma caixa de verificação. Eu quero o usuário seja capaz de selecionar várias caixas de seleção e, em seguida, executar uma ação. Por exemplo, se seleccionar caixas nas linhas 1 e 2, os dados de outras colunas nas linhas 1 e 2 pode ser seleccionado e passou para um messagebox.

Eu sei que eu preciso para usar o evento checkbox_changed para fazer isso. No entanto, estou tendo problemas para trabalhar fora como fazer isso de várias linhas?

Foi útil?

Solução

No evento Click do botão fazer:

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

Outras dicas

Se você deseja que o usuário clique em um botão para executar a ação, então o que você precisa para lidar com o evento Click do botão, não o CheckBox Changed evento ... Quando o botão é clicado, basta ir através de todos fileiras de seu DataGridView e executar uma ação em linhas com uma caixa de seleção marcada.

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

Eu acho que você não precisa de qualquer evento i resolveu este problema por este código:

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

A sua saída por este parâmetro: ItemID -> 0 // Para valores não verificados ItemID -> 1 // Para valores marcados

Agora você pode filtrar as linhas que o retorno 1 como valor para a sua acção Eu testei este código e ele funciona para mim

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top