none
Campo de solo lectura RRS feed

  • Pregunta

  • Hola a todos buenas tardes.

    Feliz 2020

    una ayuda por favor

    tengo esta consulta sql server

    create procedure sp_ObtenerRegla_por_Perfil
    @PerfilId int
    as
    begin
    declare 
    @true bit = 1 ,
    @false bit = 0
    select 
    case when Tra.idregla is null then @false else @true end as Selected,
    Reg.id, Reg.Regla from
    tbl_Regla Reg left join tbl_PerfilRegla Tra on Reg.id = Tra.idregla
    and Tra.idperfil = @PerfilId
    order by Reg.id asc
    end

    que ya cuando la cargo en el formulario c#

    queda de la siguiente manera

    y cuando intento hacer Check y seleccionar en la columna Selected me sale este error

    lo que pasa es que lo que quiero es agregar roles al perfil, ya sea administrador o otro tipo de perfil

    como puedo hacer para que no sea de solo lectura por favor.

    Les agradezco sus comentarios al respecto

    Roberto

    lunes, 6 de enero de 2020 21:36

Respuestas

  • Hola,pero ahí no muestras el código de como lo estás llenando

    yo he hecho una prueba con ese mismo procedure llenar el datagridview y no me sale que sea solod e edición.

     string cnx = ConfigurationManager.ConnectionStrings["cn"].ToString();
                DataSet ds = new DataSet();
                SqlConnection con= new SqlConnection(cnx);
                SqlCommand cmd = new SqlCommand("sp_ObtenerRegla_por_Perfil", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@PerfilId", 1);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    miércoles, 8 de enero de 2020 22:17

Todas las respuestas

  • Hola Roberto,

    Por alguna razon estas tratando de realizar alguna operacion que no sea de lectura en tu form? en el mensaje encontre SET_ITEM o SET_COLUMN_VALUE.

    saludos!

    martes, 7 de enero de 2020 13:06
  • No para nada. solo hice el query y mostré en el formulario

    Gracias

    Roberto

    martes, 7 de enero de 2020 13:16
  • Hola Roberto,

    Me parece que eso es una configuracion del lado de la aplicacion. Por el lado de base de datos ya podes mostrar la informacion (de hecho el fill en el form se hizo). Por alguna razon cuando seleccionas el combo esta queriendo actualizar algo, por eso el error. Te recomiendo agregarle permisos de escritura al usuario que realiza la ejecucion del SP y probar si el error vuelve a aparecer. Si no aparece es porque estas queriendo escribir en la base de datos, si aparece es porque tenes algun problema en el form.

    Espero te sirva!

    saludos!

    martes, 7 de enero de 2020 14:53
  • Estimado, muchas gracias.

    Sí. efectivamente intento escribir en la base de datos, me explico mejor otorgar o denegar permisos a usuarios según su perfil.

    Por ejemplo ahí debo dar permisos de crear y editar al perfil Administrador, pero no puedo porque no consigo seleccionar el Check.

    gracias por la ayuda

    Roberto

    miércoles, 8 de enero de 2020 19:09
  • Hola, podrías mostrar el código de como llenas el datagridview?

    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    miércoles, 8 de enero de 2020 19:43
  • Pero como no

    ahí está

    private void dataGridViewReglasporPerfil_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex != -1 && e.ColumnIndex == dataGridViewReglasporPerfil.Columns["Selected"].Index) // 
                {
                    DataGridViewCheckBoxCell checkBoxCell = (DataGridViewCheckBoxCell)dataGridViewReglasporPerfil.Rows[e.RowIndex].Cells["Selected"];
                    checkBoxCell.Value = !Convert.ToBoolean(checkBoxCell.Value);
                }
            }

    y este es el de check seleccionar todo

    private void checkBoxSeleccionarTodo_CheckedChanged(object sender, EventArgs e)
            {
                try
                {
                    foreach (DataGridViewRow row in dataGridViewReglasporPerfil.Rows)
                    {
                        DataGridViewCheckBoxCell checkBoxCell = (DataGridViewCheckBoxCell)row.Cells["Selected"];
                        checkBoxCell.Value = !Convert.ToBoolean(checkBoxCell.Value);// 98.44 Noviembre
                    }
                }
                catch (Exception ex)
                {
    
                    MessageBox.Show(ex.Message + ex.StackTrace);
                }
            }

    Esto lo hice mirando este video https://youtu.be/f7PhGDRUKFo . ojala no sea prohibido hacer esto.

    hice tal cual pero a mi no me funciona el seleccionar

    Gracias por la colaboración

    Roberto 

    miércoles, 8 de enero de 2020 19:54
  • Hola,pero ahí no muestras el código de como lo estás llenando

    yo he hecho una prueba con ese mismo procedure llenar el datagridview y no me sale que sea solod e edición.

     string cnx = ConfigurationManager.ConnectionStrings["cn"].ToString();
                DataSet ds = new DataSet();
                SqlConnection con= new SqlConnection(cnx);
                SqlCommand cmd = new SqlCommand("sp_ObtenerRegla_por_Perfil", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@PerfilId", 1);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    miércoles, 8 de enero de 2020 22:17
  • Muy bien enviare todo ahora, perdón

    public class MantenimientoRegla_por_Perfil
        {
            public static sp_ObtenerRegla_por_PerfilTableAdapter obtenerRegla_Por_PerfilTableAdapter = new sp_ObtenerRegla_por_PerfilTableAdapter();
    
            public  sp_ObtenerRegla_por_PerfilDataTable ListaReglas_por_Perfil(int PerfilId)
            {
                return obtenerRegla_Por_PerfilTableAdapter.ListaReglas_por_Perfil(PerfilId);
            }
        }


    en el Load del formulario

    MantenimientoRegla_por_Perfil mantenimientoRegla_Por_Perfil = new MantenimientoRegla_por_Perfil();
            private void FormPerfil_Regla_Load(object sender, EventArgs e)
            {
                comboBoxPerfil.DataSource = perfiles.ListaPerfil();
                comboBoxPerfil.DisplayMember = "Perfil";
                comboBoxPerfil.ValueMember = "Id";
                int IdPerfil = int.Parse(comboBoxPerfil.SelectedValue.ToString());
    
                dataGridViewReglasporPerfil.DataSource = mantenimientoRegla_Por_Perfil.ListaReglas_por_Perfil(IdPerfil);
                
            }

    Esto es todo el código estimado y este mi datasettipado

    por favor, y disculpa debí pasar antes todo el codigo

    gracias

    Roberto

    jueves, 9 de enero de 2020 1:31