none
Mostrar lista de campos en ComboBox RRS feed

  • Pregunta

  • Saludos expertos, una nueva consulta. Tengo en una BD de Sql Server 2012, dos tablas en las que se almacenan los registros que corresponden a instituciones, los cuales necesito mostrar en un único combobox para que los usuarios puedan seleccionar el nombre de la institución a la que pertenecen indistintamente de si la misma corresponde a la primera y segunda tabla. mas abajo muestra la estructura de las tablas y los campos que necesito mostrar son Dsc_DescpDepCapituloDsc_DescpDepSubcapitulo. De ser posible realizar esta acción desde C#, les agradecería algo de orientación.

    Tb_Capitulo
    IdCapitulo (PK, int, not null)
    Sector (varchar(1), null)
    Subsector (varchar(1), null)
    Area (varchar(1), null)
    Subarea (varchar(1), null)
    Seccion (varchar(1), null)
    UIPodOrgEsp (varchar(2), null)
    UIEntidad (varchar(4), null)
    DepCapitulo (varchar(4), null)
    Dsc_DescpDepCapitulo (varchar(100), null)
    Dsc_Estado (varchar(1), null)
    Dsc_Nota (varchar(100), null)

    Tb_Subcapitulo

    IdSubcapitulo (PK, int, not null)
    Sector (varchar(1), null)
    Subsector (varchar(1), null)
    Area (varchar(1), null)
    Subarea (varchar(1), null)
    Seccion (varchar(1), null)
    UIPodOrgEsp (varchar(2), null)
    UIEntidad (varchar(4), null)
    DepCapitulo (varchar(4), null)
    DepSubcapitulo (varchar(2), null)
    Dsc_DescpDepSubcapitulo (varchar(100), null)
    Dsc_Estado (varchar(1), null)
    Dsc_Nota (varchar(100), null)


    • Editado soyeddygh miércoles, 19 de noviembre de 2014 13:58
    miércoles, 19 de noviembre de 2014 13:56

Respuestas

  • Su problema no es C#, es T-SQL.  Es bien sencillo, creo yo:

    Select
        IdCapitulo As [ID]
        , Dsc_DescpDepCapitulo As [Nombre]
    Where
        <condiciones>
    Union All
        IdSubcapitulo
        , Dsc_DescpDepSubcapitulo
    Where
        <condiciones>
    ;

    Eso devuelve un resultado con dos columnas ID y Nombre.  Esto asume que el ID es suficiente para saber de cuál tabla viene, pero si hay ID's repetidos necesita recopilar una tercera columna que indique de qué tabla viene cada registro:

    Select
        IdCapitulo As [ID]
        , 'Capitulo' As [Tabla]
        , Dsc_DescpDepCapitulo As [Nombre]
    Where
        <condiciones>
    Union All
        IdSubcapitulo
        , 'Subcapitulo'
        , Dsc_DescpDepSubcapitulo
    Where
        <condiciones>
    ;

    Ahí uso unos valores de texto como ejemplo, pero mejor manejar numéricos.  Yo usaría 1 para la tabla de capítulos y 2 para la de subcapítulos.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta soyeddygh miércoles, 19 de noviembre de 2014 14:55
    miércoles, 19 de noviembre de 2014 14:23
    Moderador

Todas las respuestas

  • Su problema no es C#, es T-SQL.  Es bien sencillo, creo yo:

    Select
        IdCapitulo As [ID]
        , Dsc_DescpDepCapitulo As [Nombre]
    Where
        <condiciones>
    Union All
        IdSubcapitulo
        , Dsc_DescpDepSubcapitulo
    Where
        <condiciones>
    ;

    Eso devuelve un resultado con dos columnas ID y Nombre.  Esto asume que el ID es suficiente para saber de cuál tabla viene, pero si hay ID's repetidos necesita recopilar una tercera columna que indique de qué tabla viene cada registro:

    Select
        IdCapitulo As [ID]
        , 'Capitulo' As [Tabla]
        , Dsc_DescpDepCapitulo As [Nombre]
    Where
        <condiciones>
    Union All
        IdSubcapitulo
        , 'Subcapitulo'
        , Dsc_DescpDepSubcapitulo
    Where
        <condiciones>
    ;

    Ahí uso unos valores de texto como ejemplo, pero mejor manejar numéricos.  Yo usaría 1 para la tabla de capítulos y 2 para la de subcapítulos.


    Jose R. MCP
    Code Samples

    • Marcado como respuesta soyeddygh miércoles, 19 de noviembre de 2014 14:55
    miércoles, 19 de noviembre de 2014 14:23
    Moderador
  • Hola soyeddygh. El problema podría ser resuelto como menciona José combinando el resultados de dos o más consultas utilizando el operador UNION [ALL]  e incluso podrías hacerlo desde tu capa de presentación haciendo dos bucles que llenen tu combo y que consuman tabla por tabla. Pero veo que tú problema viene desde la concepción del modelo de tu base de datos. Tienes dos tablas en las que no encuentro diferencia alguna, mas que su nombre y el nombre de su PK. ¿Por que no tener una sola tabla y crearte una nueva columna que distinga si es capítulo o subcapitulo? ¿Porque no hay ninguna relación entre capítulo y subcapítulo? Podrías aprovechar incluso tenerlo en una sola tabla y además de indicar de que tipo se trata (CAPÍTULO O SUBCAPÍTULO) tener una columna que indique cuál es el capítulo del subcapítulo. Se entiende que en el caso de los capítulos ese valor será NULL y si te das cuenta incluso y sin necesidad de tener la columna Tipo podrías reconocer los capítulos con el valor NULL.
    miércoles, 19 de noviembre de 2014 14:55
  • Excelente Jose R. Gracias por su explicación... ha sido de muchísima ayuda.
    miércoles, 19 de noviembre de 2014 14:56