none
Mostrar informacion en DataGrid? RRS feed

  • Pregunta

  • Hola buenas, estoy haciendo una aplicación en wpf c#, que se encarga de escuchar sobre un servidor y mostrar cierta información sobre la aplicación de usuario, la duda, es como mostrar esa información.

    No se si mostrarlo en un Datagrid o en que. La información tengo que mostrarla en formato de columnas, mi duda está, en que en una de las columnas tengo que meter un contador, un temporizador, un cronómetro, y no se como hacerlo en un datagrid. Después tengo que meter botones, pero eso ya se que se puede hacer.

    La duda es, cual sería la mejor forma de mostrar esa info, teniendo en cuenta que uno de los campos va a ser ese cronómetro?

    Muchas gracias

    jueves, 3 de mayo de 2012 12:33

Respuestas

  • Hola Hercross.

    si lo entiendo bien ¿para borrar una fila necesitas el id y no sabes como obtenerlo correcto?.

    Bien, el id es necesario para borrar un registro de cualquier almacen de datos, mas que el id es exactamente una clave primaria ya que si no, se podria borrar mas de un registro y se debe tener en cuenta.

    en tu caso por poner un ejemplo si un registro tiene una columna 'ciudad' y tu borras por ese campo, se borraran todos los registros que contengan esa ciudad ¿correcto?.

    con lo cual, para borrar un registro, deberias de obtener el item seleccionado en el listview, obtener su identificador unico y eliminarlo de la BBDD.

    Segun el codigo que has puesto si tienes el estadoID puedes probar esto:

    estadoLlamadas.Remove(estadoLlamadas.FirstOrDefault((item) => item.estadoID == "645.9"));


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Marcado como respuesta Hercross miércoles, 16 de mayo de 2012 13:17
    lunes, 14 de mayo de 2012 18:39

Todas las respuestas

  • Hola Hercross.

    Pues si lo que quieres es maxima personalizacion en el contexto de un grid, la posible mejor opcion es hacer uso de un ListView, que hereda de listbox y te permite personalizarlo en gran medida, mas basico ya seria hacer uso de ItemsControl, pero tendrias que implementar alguna funcionalidad de seleccion, de modo que yo optaria por un ListView.

    Te dejo la info en la MSDN :

    http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx

    y un ejemplo para que veas sus posibilidades:

    http://www.c-sharpcorner.com/uploadfile/mahesh/listview-in-wpf/

    Si tienes algun problema con la implementacion comentalo.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    jueves, 3 de mayo de 2012 14:59
  • Hola :)

    La verdad que no soy un experto en XAML.. ultimamente he trabajado varios proyectos en este. Pero coincido totalmente con @David.. el control ListView es sin duda extremadamente personalizable. Se pueden lograr varias cosillas interesantes usando DataTemplate

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    jueves, 3 de mayo de 2012 15:44
  • http://msdn.microsoft.com/es-es/library/system.windows.controls.listview(v=vs.90).aspx

    aqui en e primer link te dejo datos sobre el list view y si como han dichos los anteriores es recomendable el list view ya que he trabajado varios proyectos y uso el data grid view en windows forms c sharp

    ahi te traigo un codigo lo cual lo ice en VB espero que lo comprendas y adpatalo a tu trabajo

    Dim contador1 As Integer
        contador1 = 0
        Dim i
        On Error Resume Next
        For i = 0 To Winsock2.UBound
            If Winsock2(i).State = 7 Then contador1 = contador1 + 1
        Next i
       
        If contador1 = 0 Then
            If Winsock2(0).State = 2 Then
                Res_Estado1.Caption = "Sin servers."
                End If
        If contador1 > 0 Then
            Res_Estado1.Caption = "Selecciona server."
            End If
           
        If Winsock2(i).State = 0 Then
            ListView1.ListItems.Item(i).Checked = True
                ListView1.ListItems.Remove (i)
                contador1 = contador1 - 1
        End If

        End If


    Stanley Subi

    domingo, 6 de mayo de 2012 0:39
  • Hola, muchas gracias a todos por responder.

    He estado probando con el listview y me va bien. Muestra la información como quiero y funciona bien, a falta de retocarlo mas claro está.

    Pero una pregunta, a la hora de eliminar una fila o modificar su contenido, es posible hacerlo conociendo solo el valor que tengo en una columna?

    Es decir, yo tengo una fila con 20 columnas, y cada columna con su información. A la hora de eliminar una fila, tengo que eliminarla solo conociendo el valor de una de esas columnas, eliminando toda la fila al completo, o modificando una columna en concreto. No se si me explico...

    Como se podría hacer?

    Muchas gracias

    martes, 8 de mayo de 2012 12:11
  • Hola Hercross.

    Eso depende de como estes enlazando los datos, el ListView al igual que el datagrid en WPF/Silverlight solo es una representacion visual de los datos mediante el uso de plantillas, realmente los datos es una coleccion que se asocia al itemsource de los controles, lo unico que tienes que hacer es coger la coleccion, hacerle una consulta mediante linq e indicar que ha cambiado la propiedad.

    Si pones algo de codigo sobre el enlace y el listview te podremos ayudar mejor.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    miércoles, 9 de mayo de 2012 16:57
  • Hola buenas...

    Ok, cuento un poco que es lo que trato de hacer y como estoy mostrando los datos en el listview.

    Yo tengo hecha una aplicacion que se encarga de escuchar sobre un servidor, y recoge información que le manda el servidor y tengo que mostrarla al usuario.

    Esto lo hago de la siguiente forma:

    Cada vez que recibo la información llamo al metodo que me la muestra en le listview:

    mostrar(e.Dato1, e.Dato2, e.ID.....);

    Luego en el método mostrar:

    public void mostrar(string dato1, string dato2, string ID)
    {
        listView1.Dispatcher.BeginInvoke(new Action(delegate()

        {

            _estadoLlamadas.Add(new estado

            {
                estadoDato1 = dato1,
                estadoDato2 = dato2,
                estadoID = ID
            });
        }));
    }

    public ObservableCollection<estado> estadoLlamadas
    {
        get { return _estadoLlamadas; }
    }

    public class estado

    {
        public string estadoDato1 { get; set; }
        public string estadoDato2 { get; set; }
        public string estadoID { get; set; }
    }

    De esta forma, muestro los datos en el listview, el listview se refresca, y se van añadiendo filas a medida que se van añadiendo datos.

    Hasta ahí todo bien. Pero a la hora de borrarlos, el servidor, del que escucho la información, solo me dice que da el ID, me dice que tengo que borrar el ID 645.9, por ejmplo, y yo debería de borrar la línea completa en la que esté ese ID.

    No se si me explico...

    No se si habrá otra forma mejor de hacerlo o como podría hacerlo.

    Muchas gracias

    jueves, 10 de mayo de 2012 12:43
  • Hola Hercross.

    si lo entiendo bien ¿para borrar una fila necesitas el id y no sabes como obtenerlo correcto?.

    Bien, el id es necesario para borrar un registro de cualquier almacen de datos, mas que el id es exactamente una clave primaria ya que si no, se podria borrar mas de un registro y se debe tener en cuenta.

    en tu caso por poner un ejemplo si un registro tiene una columna 'ciudad' y tu borras por ese campo, se borraran todos los registros que contengan esa ciudad ¿correcto?.

    con lo cual, para borrar un registro, deberias de obtener el item seleccionado en el listview, obtener su identificador unico y eliminarlo de la BBDD.

    Segun el codigo que has puesto si tienes el estadoID puedes probar esto:

    estadoLlamadas.Remove(estadoLlamadas.FirstOrDefault((item) => item.estadoID == "645.9"));


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Marcado como respuesta Hercross miércoles, 16 de mayo de 2012 13:17
    lunes, 14 de mayo de 2012 18:39
  • Hola David...

    Muchas gracias por responder. He estado haciendo pruebas antes de que contestaras, y lo consegui, pero haciendo varios pasos, voy a probar tu solución, que parece mas directa.

    Gracias

    martes, 15 de mayo de 2012 7:37
  • Perfecto... Eso es lo que necesitaba.

    Muchas gracias

    miércoles, 16 de mayo de 2012 13:17