activar columna de datagrid y que acepte solo datos numericos

Iniciado por SAGA-gl, 15 Agosto 2017, 01:41 AM

0 Miembros y 1 Visitante están viendo este tema.

SAGA-gl

buenas noches gente del foro tanto tiempo sin pasarme por aca....verán tengo un datagrid en el cual hago una consulta y la muestro en el mismo....pero deseo activar una columna (cantidadContada) solamente para que se puedan ingresar datos de tipo numérico....como puedo lograrlo? escribi este código pero no lo logro muchas grax d antemano....
Código (csharp) [Seleccionar]
try
                        {
                            conectar.Open();
                            string query = "SELECT * FROM detalle_inventario WHERE inventario=@inventario";
                            SqlCommand consulta = new SqlCommand(query, conectar);
                            consulta.Parameters.AddWithValue("@inventario", inventario);
                            SqlDataAdapter adaptador = new SqlDataAdapter(consulta);
                            DataTable datos = new DataTable();
                            adaptador.Fill(datos);
                            dgv.AutoGenerateColumns = false;
                            dgv.DataSource = datos;
                            dgv.Columns[0].DataPropertyName = "ubicacion";
                            dgv.Columns[1].DataPropertyName = "medicamento";
                            dgv.Columns[2].DataPropertyName = "lote";
                            dgv.Columns[3].DataPropertyName = "vto";
                            dgv.Columns[4].DataPropertyName = "cantidadContada";
                           
                            activarControles();
                        }
                        catch (SqlException ex)
                        {
                            MessageBox.Show(ex.ToString());
                        }
                        finally
                        {
                            conectar.Close();

                        }
private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            var dgv = (sender as DataGridView);
            if (dgv.Columns[dgv.CurrentCell.ColumnIndex].Name == "cantidadContada")
            {
                TextBox cell = (TextBox)e.Control;

                cell.KeyPress -= new KeyPressEventHandler(this.Cell_KeyPress);
                cell.KeyPress += new KeyPressEventHandler(this.Cell_KeyPress);
            }
           
        }
        private void Cell_KeyPress(object sender, KeyPressEventArgs e)
        {
            var cell = (TextBox)sender;

            e.Handled = !Char.IsNumber(e.KeyChar) && e.KeyChar != Convert.ToChar(Keys.Back);
        }

Eleкtro

Hola.

El algoritmo es correcto y funciona. Probablemente el fallo lo tengas en esta instrucción:
Citar
Código (csharp) [Seleccionar]
if (dgv.Columns[dgv.CurrentCell.ColumnIndex].Name == "cantidadContada")

...Fíjate bien en que ahí estás evaluando la propiedad Name de la columna (por defecto: 'Column1', 'Column2', etc), no la propiedad DataPropertyName.

Un modo rápido de resolverlo:
Código (csharp) [Seleccionar]
if (dgv.Columns[dgv.CurrentCell.ColumnIndex].DataPropertyName == "cantidadContada")

Saludos.