Tengo un dataGridView cuando hago clic en cualquier fila se abre un formulario para actualizar los datos de la fila, pero después de poner fin a las actualizaciones de la actualidad está cerrado, pero el control dataGridView de datos no se actualiza

¿Cómo puedo hacer eso ?

  • dataGridView1.Refresh();
  • Refresh(); es gráficos de actualización, no a los datos, he cometido el mismo error! Resumen: las Fuerzas de control para invalidar su área de cliente y de inmediato dibujarse y los controles secundarios.
  • Usted debe aceptar algunas respuestas a sus preguntas…
InformationsquelleAutor amer | 2011-08-10

8 Comentarios

  1. 38

    BindingSource es el único camino, sin ir a un 3º partido ORM, puede parecer largo aliento, en primera, pero los beneficios de un método de actualización en el BindingSource son tan útiles.

    Si tu fuente es decir, por ejemplo, una lista de cadenas de usuario

    List<string> users = GetUsers();
    BindingSource source = new BindingSource();
    source.DataSource = users;
    dataGridView1.DataSource = source;

    a continuación, cuando el hecho de edición acabo de actualizar sus datos de objeto, ya sea un DataTable o de la Lista de usuario de cadenas como aquí y ResetBindings en el BindingSource;

    users = GetUsers(); //Update your data object
    source.ResetBindings(false);
    • hm, que viene desde «simples DataGridView de actualización de la pregunta», este ResetBinding() llamada todavía no funciona con mi simple proyecto de prueba 😉 ¿Puede dar un real, edificable, ejemplo de trabajo de esta haciendo la actualización correctamente?
    • ResetBindings parece funcionar sólo con .tipos de redes. Creo que si uso una colección personalizada que usted necesita para implementar la interfaz IBindingList, pero no he probado todavía.
    • ¿A qué te refieres por la costumbre de colección?
    • No lo he probado por @EdSykes IBindingList sugerencia, pero esto no no trabajar con BindingList<T> bien por desgracia.
  2. 31

    Volver a enlazar tu DatagridView a la fuente.

    DataGridView dg1 = new DataGridView();
    dg1.DataSource = src1;
    
    //Update Data in src1
    
    dg1.DataSource = null;
    dg1.DataSource = src1;
    • donde debo poner este código en el formulario padre o hijo ?
    • Esto es sólo un ejemplo, sólo quieres las dos filas inferiores, y usted quiere que ellos después de una actualización. Así que imagínate en el padre, en el hijo de cierre del evento.
    • Así es como yo solía hacerlo y funciona bien, pero me encontré con un ‘BindingSource’ con una ‘ResetBindings’ método (como por mi respuesta) excelente!
    • valdría la pena la actualización de su ejemplo y la mención de que si uno de los valores nulos fuera de la propiedad DataSource, entonces pierden el esquema (columnas). Por lo general es mejor ponerlo typeof(ElementType), donde ElementType es el tipo de encuadernado filas.
    • a pesar de que funciona, pero tienes que restablecer algunas de las propiedades de su datagridview como encabezado de la columna de texto, el tamaño de las columnas y la visibilidad de algunos columna como identificador y …
    • Esto no funciona para mí, pero voy a tratar de nuevo.

  3. 0

    No sé si esto realmente ha sido resuelto o no… pero mirando en todas las otras respuestas, nada parece bastante claro. La mejor manera que he encontrado para hacer esto es poner el mismo código, que se utiliza para rellenar su datagridview en un método y que pasa en tu formulario datagridview, así como:

    public void ConnectAndPopulateDataGridView(DataGridView dataGridView)
    { }

    El código dentro del método es exactamente el mismo que el código que se usa para rellenar el datagirdview originalmente, excepto para el datagridview nombre cambio a lo que se llamó en su método.

    Ahora se llama a este método en el formulario principal.

    El formulario hijo es lanzado a través de un .ShowDialog(), a continuación, se llama al método después de lo que se llama la derecha después de que el niño es cerrado… así como:

    ChildForm.ShowDialog();
    
    ConnectAndPopulateDataGridView(dataGridView1);
  4. 0

    Puede utilizar el DataGridView método de actualización. Pero… en muchos de los casos usted tiene que actualizar el DataGridView de los métodos que se ejecutan en un subproceso diferente de aquel en el que el DataGridView se está ejecutando. Con el fin de hacer que debe implementar el siguiente método para llamar a ella en lugar de escribir directamente DataGridView.Actualizar():

        private void RefreshGridView()
        {
            if (dataGridView1.InvokeRequired)
            {
                dataGridView1.Invoke((MethodInvoker)delegate ()
                {
                    RefreshGridView();
                });
            }
            else
                dataGridView1.Refresh();
        }  
  5. 0

    Sé que llego tarde a la fiesta, pero espero que esto ayude a alguien que va a hacer lo mismo con la Clase de unión

    var newEntry = new MyClassObject();
    
    var bindingSource = dataGridView.DataSource as BindingSource;
    var myClassObjects = bindingSource.DataSource as List<MyClassObject>;
    myClassObjects.Add(newEntry);
    bindingSource.DataSource = myClassObjects;
    
    dataGridView.DataSource = null;
    dataGridView.DataSource = bindingSource;
    dataGridView.Update();
    dataGridView.Refresh();
  6. 0

    Sé que es un viejo tema pero de repente me he encontrado la mejor manera de hacerlo y no se requiere de anular el origen de los datos y la reasignación de ella.
    Sólo tiene que utilizar un BindingList en lugar de una Lista.

    por ejemplo:

    //declare your list
    private BindingList<myclass> mMyList = new BindingList<myclass>();
    
    //then bind it to your datagrid, i usually do it on the Load event
    private void Form1_Load(object sender, EventArgs e)
    {
        _dgMyDatagrig.DataSource = mMyList;
    }
    
    //start populating your list 
    private void addItem(mycclass item)
    {
        mMylist.add(item);
    
    //the datagrid will show automatically the new added/updated items, no need to do anything else
    
    }
  7. -1

    Sólo se necesita redefinir la DataSource. Así que si tienes por ejemplo DataGridView del origen de datos que contiene a, b, i c:

    DataGridView.DataSource = a, b, c

    Y de repente actualizar el origen de datos para que usted acaba de a y b, sería necesario redefinir el origen de datos:

    DataGridView.DataSource = a, b

    Espero que encuentre útil.

    Gracias.

  8. -1

    Puede utilizar SqlDataAdapter para actualizar el DataGridView

         using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Table", conn))
                {
                   DataTable dt = new DataTable();
                     ad.Fill(dt);
                   dataGridView1.DataSource = dt;
                }
            }

Dejar respuesta

Please enter your comment!
Please enter your name here