ID | Asunto | Fecha | Nick | |
58111 | Bloquear opciones de ComboBox segun ID de usuario | 08/11/16 20:50 | Ziany | | |
Hola, tengo una duda la cual e tratado de resolver y e buscado mucha información la cual no me ha ayudado. Estoy desarrollando una aplicación de contratos, ordenes de servicio y facturas en Visual Basic; en la cual debo lograr que según sea el usuario registrado, se le asignen uno o mas contratos. Por ejemplo, tengo los usuarios admin1 con ID 1 y admin2 con ID 2; creo un contrato y se lo asigno a admin1. Tengo un Form para que puedan añadir las ordenes y facturas de ese contrato, en el cual tengo un ComboBox en el cual se muestran los contratos existentes; lo que quiero es que si admin2 se registra y quiere añadir una factura a otro contrato asignado a él, no se le muestren los contratos asignados a admin1 para que no pueda editarlo. Mis tablas en SQL son estas --tabla usuarios
create table usuarios(
CEDULA bigint not null,
NOMBRE char (30) not null,
PRIMER_APELLIDO char (30) not null,
SEGUNDO_APELLIDO char (30) not null,
TIPO_DE_USUARIO VARCHAR (20) NOT NULL,
CORREO_ELECTRONICO varchar (30) not null,
CONTRASEÑA varchar (30) not null
constraint pk_usuarios primary key (CEDULA)
)
--tabla contratos
create table contrato(
NUMERO_DE_CONTRATO BIGINT not null,
PROVEEDOR varchar (30) not null,
CEDULA_JURIDICA BIGINT not null,
USUARIO_ADMINISTRADOR VARCHAR (30) NOT NULL,
CEDULA bigint NOT NULL,
ARCHIVOS IMAGE,
constraint pk_contrato primary key (NUMERO_DE_CONTRATO),
constraint fk_contrato foreign key (CEDULA) references usuarios(CEDULA)
) Asi lleno el combobox con los datos de la base de datos: ''CARGAR COMBOBOX CON SQL
conectar()
sql = "select * from contrato"
da = New SqlClient.SqlDataAdapter(sql, coneccion)
Dim dt As New DataTable
da.Fill(dt)
combocontrato.DataSource = dt.DefaultView
combocontrato.DisplayMember = "NUMERO_DE_CONTRATO"
combocontrato.ValueMember = "NUMERO_DE_CONTRATO"
combocontrato.Text = ""
conexion.Close() Ese combo lo usaria para elegir el contrato al que le quiero agregar una factura u orden. Espero puedan ayudarme, Saludos! |
|
ID | Asunto | Fecha | Nick | |
58114 | Re: Bloquear opciones de ComboBox segun ID de usuario (Resp: 58111) | 09/11/16 14:34 | sistemas | | |
vale, en lugar de asignar directamente al combo la tabla debes crear una vista así:
Dim bind1 As New DataView bind1 = Tutabla.DefaultView
luego a dicha vista le puedes agregar un filtro que es como la opción del "where" de una querry pero sin el where:
bind1.RowFilter = "Usuario='admin'"
Y luego al data source del combo le asignas el bind1 en lugar de la tabla
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
58115 | Re: Bloquear opciones de ComboBox segun ID de usuario (Resp: 58111) | 09/11/16 14:43 | Ziany | | |
Hola, gracias por responder. Donde pones "Tutabla" e puesto el nombre de mi tabla en este caso contratos, pero marca error, no se si deba ir entre comillas, si es así podrías indicarmelo. Y donde pones bind1.RowFilter = "Usuario='admin'" son varios usuarios, no se si se pueda hacer que con el nombre de usuario que ingresa en el textbox cuando se loquea sea con el que se crea el filtro, si se pudiera por favor indícame como
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
58116 | Re: Bloquear opciones de ComboBox segun ID de usuario (Resp: 58111) | 09/11/16 16:05 | Ziany | | |
Hola de nuevo, Lo hice de esta manera: conectar()
sql = "select * from contrato"
da = New SqlClient.SqlDataAdapter(sql, coneccion)
Dim dt As New DataTable
da.Fill(dt)
Dim bind1 As New DataView
'ESTA LINEA MARCA EL ERROR
bind1 = dt.DefaultView.Sort = ("NUMERO_DE_CONTRATO")
bind1.RowFilter = "USUARIO_ADMISTRADOR=@usuario"
Dim comando As New SqlClient.SqlCommand(sql, coneccion)
combocontra.DataSource = bind1
combocontra.DisplayMember = ("NUMERO_DE_CONTRATO")
combocontra.ValueMember = ("NUMERO_DE_CONTRATO")
combocontra.Text = ""
comando.Parameters.AddWithValue("@usuario",
LoginForm1.UsernameTextBox.Text)
coneccion.Close() Pero me manda este error en la linea que he comentado: El valor de tipo boolean no se puede convertir en DataView. Espero su ayuda. Saludos!,
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |
|
ID | Asunto | Fecha | Nick | |
58117 | Re: Bloquear opciones de ComboBox segun ID de usuario (Resp: 58111) | 09/11/16 17:27 | Ziany | | |
Ya he solucionado el problema, de todas formas muchas gracias. Dejo el código aquí por si alguien tiene un problema parecido. Try
conectar()
Dim sql = "select NUMERO
_DE_CONTRATO from Tabla where USUARIO_ADMINISTRADOR = @usuario Order By NUMERO_DE_CONTRATO
ASC"
Dim da As New SqlClient.SqlDataAdapter(sql, coneccion)
da.SelectCommand.Parameters.AddWithValue("@usuario",
LoginForm1.UsernameTextBox.Text)
Dim dt As New DataTable
da.Fill(dt)
ComboBox.DataSource = dt
ComboBox.DisplayMember = "NUMERO_DE_CONTRATO"
ComboBox.ValueMember = "NUMERO_DE_CONTRATO"
coneccion.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try [Editado: Ziany, 09/11/2016 17:28:17] [Ziany, 09/11/2016 17:30:09]
Si esta respuesta resuelve tu duda, por favor pulsa en la de este mensaje. Gracias. |