none
Somente numeros RRS feed

  • Pergunta

  • Há como configurar a datagridview para aceitar somente numeros em determinadas colunas ??
    Por exemplo configurar o datagridview para que nas colunas 3 ; 4 ; 5 aceitar somente valores numericos valores quebrados tipo 10,90 ; 3,99 ....
    segunda-feira, 26 de fevereiro de 2007 12:28

Respostas

  • Uma outra solução além da sugerida pelo Leonardo é adicionar um eventhandler para o evento KeyPress do controle da célula --fazendo o cast do controle para um TextBox -- no evento EditingControlShowing do DGV. No evento KeyPress você então verificaria se o usuário só está digitando números, engolindo qualquer outro caractere que seja digitado. Finalmente quando a edição terminar, você remove o eventhandler do TextBox usando o evento CellEndEdit do DGV.

    Aqui uma demonstação, que permite apenas números na coluna de índice 3 do DGV:

    // Variável ara referência da célula do DGV.
    private TextBox txtCelulaEditada;
    // Adiciona o evento KeyPress do controle txtCelulaEditada quando a edição de uma célula começar.
    private void dataGrid1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        DataGridView dgv = (DataGridView)sender;

        if (dgv.CurrentCell.ColumnIndex == 3)
        {
            txtCelulaEditada = e.Control as TextBox;
            if (txtCelulaEditada == null)
                return;
            txtCelulaEditada.KeyPress += new KeyPressEventHandler(txtCelulaEditada_KeyPress);
        }
    }

    // Remove o evento KeyPress do controle txtCelulaEditada quando a edição de uma célula terminar.
    private void dataGrid1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if (txtCelulaEditada != null)
        {
            txtCelulaEditada.KeyPress -= new KeyPressEventHandler(txtCelulaEditada_KeyPress);
            txtCelulaEditada = null;
        }
    }

    // Garante que somente números sejam digitados na célula do DGV.
    private void txtCelulaEditada_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back)
        {
            e.Handled = true;
        }
    }

     

    terça-feira, 27 de fevereiro de 2007 01:06
  • Junior,

    Umas das formas mais fáceis é você fazer isso no evento CellValidating, veja um exemplo:

    http://msdn2.microsoft.com/en-us/library/ykdxa0bc.aspx

    segunda-feira, 26 de fevereiro de 2007 13:42
  • Dei uma olhada no link que me enviou mas me da uma mensagem de erro enorme pois pelo que vi esse exemplo valida dados tipo string e não estou conseguindo validar dados numericos pois minhas colunas que tem que ser validadas são todas formatdas para valores com até 3 casas depois da virgula tip 10,009 coisa assim  coo faço para validar dados numericos o C# não dispoe de metodos tipo IsNumeric , coisas do tipo

    Valeu mais uma vez

    segunda-feira, 26 de fevereiro de 2007 18:45
  • O melhor lugar (mais fácil) para tratar isso é nesse evento. Use TryParse. Mas caso queira algo mais robusto, você pode herdar o TextBoxColumn e tratar os eventos de teclas como KeyDown.
    segunda-feira, 26 de fevereiro de 2007 20:19

Todas as Respostas

  • Junior,

    Umas das formas mais fáceis é você fazer isso no evento CellValidating, veja um exemplo:

    http://msdn2.microsoft.com/en-us/library/ykdxa0bc.aspx

    segunda-feira, 26 de fevereiro de 2007 13:42
  • Dei uma olhada no link que me enviou mas me da uma mensagem de erro enorme pois pelo que vi esse exemplo valida dados tipo string e não estou conseguindo validar dados numericos pois minhas colunas que tem que ser validadas são todas formatdas para valores com até 3 casas depois da virgula tip 10,009 coisa assim  coo faço para validar dados numericos o C# não dispoe de metodos tipo IsNumeric , coisas do tipo

    Valeu mais uma vez

    segunda-feira, 26 de fevereiro de 2007 18:45
  • O melhor lugar (mais fácil) para tratar isso é nesse evento. Use TryParse. Mas caso queira algo mais robusto, você pode herdar o TextBoxColumn e tratar os eventos de teclas como KeyDown.
    segunda-feira, 26 de fevereiro de 2007 20:19
  • Uma outra solução além da sugerida pelo Leonardo é adicionar um eventhandler para o evento KeyPress do controle da célula --fazendo o cast do controle para um TextBox -- no evento EditingControlShowing do DGV. No evento KeyPress você então verificaria se o usuário só está digitando números, engolindo qualquer outro caractere que seja digitado. Finalmente quando a edição terminar, você remove o eventhandler do TextBox usando o evento CellEndEdit do DGV.

    Aqui uma demonstação, que permite apenas números na coluna de índice 3 do DGV:

    // Variável ara referência da célula do DGV.
    private TextBox txtCelulaEditada;
    // Adiciona o evento KeyPress do controle txtCelulaEditada quando a edição de uma célula começar.
    private void dataGrid1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        DataGridView dgv = (DataGridView)sender;

        if (dgv.CurrentCell.ColumnIndex == 3)
        {
            txtCelulaEditada = e.Control as TextBox;
            if (txtCelulaEditada == null)
                return;
            txtCelulaEditada.KeyPress += new KeyPressEventHandler(txtCelulaEditada_KeyPress);
        }
    }

    // Remove o evento KeyPress do controle txtCelulaEditada quando a edição de uma célula terminar.
    private void dataGrid1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if (txtCelulaEditada != null)
        {
            txtCelulaEditada.KeyPress -= new KeyPressEventHandler(txtCelulaEditada_KeyPress);
            txtCelulaEditada = null;
        }
    }

    // Garante que somente números sejam digitados na célula do DGV.
    private void txtCelulaEditada_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back)
        {
            e.Handled = true;
        }
    }

     

    terça-feira, 27 de fevereiro de 2007 01:06