none
Datagridview coluna checkbox RRS feed

  • Pergunta

  • Tenho um projeto feito em C# usando VS2008 onde tenho um datagridview com uma coluna do tipo checkbox o objeto datagridview é carregado diretamente por um DataSet ele carrega perfeitamente a coluna checkbox aparece sem problemas ... mas eu estou precisando verificar quantas linhas do datagridview estão checadas eu ja tentei em varios eventos mais não da certo gostaria de saber como testar se a linha esta checada ou não eu teria que a cada clique ou seja a cada linha checada incrementar um campo.
    Junior
    terça-feira, 19 de outubro de 2010 12:19

Respostas

  • Junior,

    Você terá que varrer todo o grid para saber as colunas marcadas:

      private int GetCheckedRowCount(DataGridView grid, string checkColumnName)
      {
       // pega o valor da coluna checada...
       object checkedValue = ((DataGridViewCheckBoxColumn)grid.Columns[checkColumnName]).TrueValue;
       int count = 0;
       foreach (DataGridViewRow row in grid.Rows)
        if (((IComparable)row.Cells[checkColumnName].Value).CompareTo(checkedValue) == 0)
         count++;
       return count;
      }
    
    

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 19 de outubro de 2010 12:57
    Moderador
  • Junior,

    Você deverá colocar no CellContentClick para poder pegar no momento do clique.

    Só um detalhe é que você terá que forçar o Update do valor para funcionar corretamente, então fica assim:

      void grid_CellContentClick(object sender, DataGridViewCellEventArgs e)
      {
       // pega a coluna do check...
       DataGridViewColumn column = ((DataGridView)sender).Columns["Nome da Coluna"];
       if (e.RowIndex >= 0 && e.ColumnIndex == column.Index)
       {
        // força a atualização do valor da célula...
        ((DataGridView)sender).UpdateCellValue(e.ColumnIndex, e.RowIndex);
        // conta as células marcadas...
        int checkedRows = this.GetCheckedRowCount((DataGridView)sender, column.Name);
       }
      }
    

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 19 de outubro de 2010 13:55
    Moderador
  • Voce tambem pode usar uma query linq para contar as linhas selecionadas:

    var total = dataGridView1.Rows.OfType<DataGridViewRow>().Where(row =>
      (row.Cells["Nome da Coluna"] as DataGridViewCheckBoxCell).Value.Equals(row.Cells["Nome da Coluna"] as DataGridViewCheckBoxCell).TrueValue)).Count();
    

     


    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    terça-feira, 19 de outubro de 2010 14:52
    Moderador

Todas as Respostas

  • Junior,

    Você terá que varrer todo o grid para saber as colunas marcadas:

      private int GetCheckedRowCount(DataGridView grid, string checkColumnName)
      {
       // pega o valor da coluna checada...
       object checkedValue = ((DataGridViewCheckBoxColumn)grid.Columns[checkColumnName]).TrueValue;
       int count = 0;
       foreach (DataGridViewRow row in grid.Rows)
        if (((IComparable)row.Cells[checkColumnName].Value).CompareTo(checkedValue) == 0)
         count++;
       return count;
      }
    
    

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 19 de outubro de 2010 12:57
    Moderador
  • Em qual evento eu coloco esse codigo pois eu precisaria atualizar o valor do campo a cada clique na celula checkbox da gridview
    Junior
    terça-feira, 19 de outubro de 2010 13:49
  • Junior,

    Você deverá colocar no CellContentClick para poder pegar no momento do clique.

    Só um detalhe é que você terá que forçar o Update do valor para funcionar corretamente, então fica assim:

      void grid_CellContentClick(object sender, DataGridViewCellEventArgs e)
      {
       // pega a coluna do check...
       DataGridViewColumn column = ((DataGridView)sender).Columns["Nome da Coluna"];
       if (e.RowIndex >= 0 && e.ColumnIndex == column.Index)
       {
        // força a atualização do valor da célula...
        ((DataGridView)sender).UpdateCellValue(e.ColumnIndex, e.RowIndex);
        // conta as células marcadas...
        int checkedRows = this.GetCheckedRowCount((DataGridView)sender, column.Name);
       }
      }
    

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 19 de outubro de 2010 13:55
    Moderador
  • Voce tambem pode usar uma query linq para contar as linhas selecionadas:

    var total = dataGridView1.Rows.OfType<DataGridViewRow>().Where(row =>
      (row.Cells["Nome da Coluna"] as DataGridViewCheckBoxCell).Value.Equals(row.Cells["Nome da Coluna"] as DataGridViewCheckBoxCell).TrueValue)).Count();
    

     


    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    terça-feira, 19 de outubro de 2010 14:52
    Moderador