none
Buscar datos en un BindingSource por un Campo RRS feed

  • Pregunta

  • Hola a todos/as.

     

    Estoy intentado buscar datos a partir de un Campo de un registro enlazado a un Bindingsource y no encuentro la fórmula, y el teórico método int x = this.binding.Find("nombre campo", valor) me da el error de que la Propiedad DataMember 'nombre campo' no se encontró en el DataSource.

     

    Si alguien tiene alguna idea o ejemplo al respecto de como tengo que reorientar dicha búsqueda se lo agradezco ya que el tema de la propiedad no lo acabo de ver.

     

    Saludos.

    lunes, 5 de enero de 2009 7:39

Respuestas

Todas las respuestas

  • Hola Joanca,

     

    puedes utilizar la propiedad Filter() en vez del método Find para filtrar las filas que contiene un BindingSource.

     

    sería algo tal que así:

     

    Code Snippet
    this.binding.Filter=string.format("{0}={1}",nombre campo, valor);

     

     

     

    Tienes más información aqui:

     

    http://msdn.microsoft.com/es-es/library/system.windows.forms.bindingsource.filter.aspx

     

    Espero que te sirva!

     

    Si es así, porfavor, marca al respuesta como válida! Wink

     

    Gracias y suerte!

    lunes, 5 de enero de 2009 9:14
  • Hola Javier buenos días.

     

    La solución que me planteas es perfecta pero se escapa de mi idea inicial, ya que es un Filtro de datos, y yo lo que busco es poder validar la existencia o no de una serie de registros en la Tabla, lo que sería igual a un "Select Count(*) From Tabla ....", lo que no se es como hacerlo sobre una Tabla de un DataSet o sobre un BindingSource, por eso intentaba usar el "Find", pero me da el dichoso error de la Propiedad.

     

    Saludos.

     

     

    miércoles, 7 de enero de 2009 7:42
  • Hola joanca,

     

    si tienes acceso a un DataTable (o la tabla del DataSet), esta disponde de un método Select al que se le pasa como parámetro el filtro a aplicar (o lo que es lo mismo, la sentencia WHERE pero sin la palabra WHERE)

     

    Aqui tienes información sobre el método select:

     

    http://authors.aspalliance.com/aspxtreme/sys/data/DataTableClassSelect.aspx

     

    http://msdn.microsoft.com/es-es/library/system.data.datatable.select(VS.80).aspx

     

    Espero que te sirva! Wink

     

    Gracias y suerte!

     

    miércoles, 7 de enero de 2009 8:59
  •  Hola Javier y gracias de nuevo.

     

    Si, esta opción del Select ya la tenía probada, pero lo único es que no es más que una opción de Filtro donde necesitas de un bucle y de un DataRow con lo que le das más peso al fuente, y total para obtener un resultado que en el caso que deseo es directo para saber el número de registros existentes en una tabla, o dicho más fácil, si existe o no un registro a partir de una condición de búsqueda, lo que en cualquier base de datos haríamos un (Select Count(*) from Tabla ...), por eso estaba dándole vueltas al uso del "int x binding.Find("campo", "valor")", pero no hay manera con la Propiedad, ya que lo ponga como lo ponga no me coge el nombre del Campo, y por lo que veo con los DataSets y los Bindings no hay nada para hacer un Select tan sencillo. Quizás con los métodos "IndexOf y/o Contains", pero después de probarlos con un ejemplo tan sencillo como:

     

    string s = "tipdoc == 'S'";

    bool b = this.bindingSource.Contains(s);

    MessageBox.Show(b.ToString());

    int x = this.bindingSource.IndexOf(s);

    MessageBox.Show(x.ToString());

     

    siempre me devuelven lo mismo, es decir, "false y -1", nunca encuentran nada, por tanto no les veo la utilidad.

     

    Si se te ocurre algo te lo agradezco una vez más, ya que puede ser de interés general.

     

    Saludos.

     

    miércoles, 7 de enero de 2009 10:00
  • Hola Joanca. Han pasado ya unos añitos desde que pusiste este hilo, pero me ha sucedido lo mismo a mi.

    No sé si lograste darle solución. Yo creo haber podido saber por lo menos el porqué da ese error, pero aun no sé cómo solucionarlo.

    En mi caso, la propiedad NombreCampo no la reconoce porque DataMember  del Binding está enlazado a una relación y no a una tabla.

    Te expongo brevemente mi caso.

    Yo tengo una tabla Alumnos relacionada con otra tabla Matriculas. En la tabla Matriculas se guardan todas las matrículas de los alumnos. La tabla Matricula contiene una clave foranea llamada IdAlumno con la que se enlaza con la clave principal IdAlumno de la Tabla Alumnos. 

    En el formulario, primero arrastro desde el origen de datos a dicho formulario la tabla Alumnos a un grid, y acto seguido, y aquí está el tema, arrastro a otro grid la tabla Matriculas que cuelga de la tabla Alumnos. De esta manera, en el enlace a datos MatriculasBindingSource la propiedad Datamember no es la tabla Matriculas como cabía esperar, sino la relación entre esta tabla y la de Alumnos, algo así como FK_Matriculas_Alumnos, y la propiedad DataSource de dicho Binding, no es el Dataset donde está la tabla Alumnos, Matriculas, etc.  como también cabía esperar sino el propio BindingSouerce de Alumnos, osea, AlumnosBindingSource, no sé si me he explicado. Por esto, en la relación no existe el campo que buscamos, pero no sé como buscar en en esa relación.

    Ha pasado ya mucho tiempo desde que te dio este error, pero si recuerdas cómo le diste solución este tema te lo agradecería.

    Gracias y un saludo a ti y todo el foro.

    jueves, 31 de agosto de 2017 17:31