Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: SAGA-gl en 15 Agosto 2017, 01:41 am



Título: activar columna de datagrid y que acepte solo datos numericos
Publicado por: SAGA-gl en 15 Agosto 2017, 01:41 am
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
  1. try
  2.                        {
  3.                            conectar.Open();
  4.                            string query = "SELECT * FROM detalle_inventario WHERE inventario=@inventario";
  5.                            SqlCommand consulta = new SqlCommand(query, conectar);
  6.                            consulta.Parameters.AddWithValue("@inventario", inventario);
  7.                            SqlDataAdapter adaptador = new SqlDataAdapter(consulta);
  8.                            DataTable datos = new DataTable();
  9.                            adaptador.Fill(datos);
  10.                            dgv.AutoGenerateColumns = false;
  11.                            dgv.DataSource = datos;
  12.                            dgv.Columns[0].DataPropertyName = "ubicacion";
  13.                            dgv.Columns[1].DataPropertyName = "medicamento";
  14.                            dgv.Columns[2].DataPropertyName = "lote";
  15.                            dgv.Columns[3].DataPropertyName = "vto";
  16.                            dgv.Columns[4].DataPropertyName = "cantidadContada";
  17.  
  18.                            activarControles();
  19.                        }
  20.                        catch (SqlException ex)
  21.                        {
  22.                            MessageBox.Show(ex.ToString());
  23.                        }
  24.                        finally
  25.                        {
  26.                            conectar.Close();
  27.  
  28.                        }
  29. private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
  30.        {
  31.            var dgv = (sender as DataGridView);
  32.            if (dgv.Columns[dgv.CurrentCell.ColumnIndex].Name == "cantidadContada")
  33.            {
  34.                TextBox cell = (TextBox)e.Control;
  35.  
  36.                cell.KeyPress -= new KeyPressEventHandler(this.Cell_KeyPress);
  37.                cell.KeyPress += new KeyPressEventHandler(this.Cell_KeyPress);
  38.            }
  39.  
  40.        }
  41.        private void Cell_KeyPress(object sender, KeyPressEventArgs e)
  42.        {
  43.            var cell = (TextBox)sender;
  44.  
  45.            e.Handled = !Char.IsNumber(e.KeyChar) && e.KeyChar != Convert.ToChar(Keys.Back);
  46.        }
  47.  


Título: Re: activar columna de datagrid y que acepte solo datos numericos
Publicado por: Eleкtro en 5 Septiembre 2017, 04:02 am
Hola.

El algoritmo es correcto y funciona. Probablemente el fallo lo tengas en esta instrucción:
Citar
Código
  1. 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
  1. if (dgv.Columns[dgv.CurrentCell.ColumnIndex].DataPropertyName == "cantidadContada")

Saludos.