20 messaggi dal 11 giugno 2012
Buonasera a tutti, ho un problema con delle checkbox. Nel code behind di una pagina (metodo Page_Load) mi prendo dei valori dal db e a seconda che siano true o false metto i segni di spunta o meno sulle relative checkbox, e fin qui tutto ok. Lo scopo della pagina è quello di mostrare questi valori e permettere di modificarli e di fare l'update del db. Il problema è qui: se ho dei checkbox che non sono spuntati, li spunto e salvo, l'update avviene correttamente. Se i checkbox sono spuntati, tolgo il check e salvo questi rimangono a true. Come mai? Posto il codice della pagina se può essere utile.
Grazie!
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Modifica.aspx.cs" Inherits="WebApplication1.Utenti.Modifica" MasterPageFile="~/Site.Master" Title="Modifica Permessi" %>

<script runat="server">
    protected void Button1_Click(object sender, EventArgs e)
    {
        ModifyRole(can_read.Checked,
            can_write.Checked,
            can_update.Checked,
            can_updateall.Checked,
            can_delete.Checked,
            can_deleteall.Checked);
        messaggio.InnerHtml = "Permessi modificati correttamente!";
    }

    private void ModifyRole(bool canr, bool canw, bool canu, bool canua, bool cand, bool canda)
    {
        System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(GetConnectionString());
        string sql = "UPDATE Ute_Proc SET can_read = @canr, can_write = @canw, can_update = @canu, can_update_all = @canua, can_delete = @cand, can_delete_all = @canda WHERE id_utente = @idu AND id_procedura = @idp";
        try
        {
            conn.Open();
            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, conn);
            System.Data.SqlClient.SqlParameter[] param = new System.Data.SqlClient.SqlParameter<img src="/forum/skins/default/images/emo/png-blue/icon_smile_8ball.png" class="absmiddle emoticon" />;
            param[0] = new System.Data.SqlClient.SqlParameter("@idu", System.Data.SqlDbType.Int);
            param[1] = new System.Data.SqlClient.SqlParameter("@idp", System.Data.SqlDbType.Int);
            param[2] = new System.Data.SqlClient.SqlParameter("@canr", System.Data.SqlDbType.Int);
            param[3] = new System.Data.SqlClient.SqlParameter("@canw", System.Data.SqlDbType.Int);
            param[4] = new System.Data.SqlClient.SqlParameter("@canu", System.Data.SqlDbType.Int);
            param[5] = new System.Data.SqlClient.SqlParameter("@canua", System.Data.SqlDbType.Int);
            param[6] = new System.Data.SqlClient.SqlParameter("@cand", System.Data.SqlDbType.Int);
            param[7] = new System.Data.SqlClient.SqlParameter("@canda", System.Data.SqlDbType.Int);

            param[0].Value = Request.QueryString["id_ut"];
            param[1].Value = Request.QueryString["id_pr"];
            param[2].Value = canr;
            param[3].Value = canw;
            param[4].Value = canu;
            param[5].Value = canua;
            param[6].Value = cand;
            param[7].Value = canda;


            for (int i = 0; i < param.Length; i++)
            {
                cmd.Parameters.Add(param[i]);
            }

            cmd.CommandType = System.Data.CommandType.Text;
            cmd.ExecuteNonQuery();
        }
        catch (System.Data.SqlClient.SqlException ex)
        {
            string msg = "Insert Error:";
            msg += ex.Message;
            throw new Exception(msg);
        }
        finally
        {
            conn.Close();
            HtmlMeta meta = new HtmlMeta();
            meta.HttpEquiv = "Refresh";
            meta.Content = "2; URL=Utenti.aspx";
            Page.Header.Controls.Add(meta);
        }
    }

    public string GetConnectionString()
    {
        return ConfigurationManager.ConnectionStrings["IntranetConnectionString"].ConnectionString;
    }
</script>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    <style type="text/css">
        .style1
        {
            text-align: center;
        }
        .style2
        {
            width: 10%;
        }
    </style>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <div id="contenitore" runat="server">
        <p>
            <asp:Label runat="server">Nome utente:</asp:Label>
            <asp:Literal ID="utente" runat="server"></asp:Literal>
        </p>
        <p>
            <asp:Label runat="server">Procedura:</asp:Label>
            <asp:Literal ID="procedura" runat="server"></asp:Literal>
        </p>
    </div>
    <table>
        <thead>
            <tr>
                <th class="style2">Read</th>
                <th class="style2">Write</th>
                <th class="style2">Update</th>
                <th class="style2">Update All</th>
                <th class="style2">Delete</th>
                <th class="style2">Delete All</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="style1"><asp:CheckBox runat="server" ID="can_read" /></td>
                <td class="style1"><asp:CheckBox runat="server" ID="can_write" /></td>
                <td class="style1"><asp:CheckBox runat="server" ID="can_update" /></td>
                <td class="style1"><asp:CheckBox runat="server" ID="can_updateall" /></td>
                <td class="style1"><asp:CheckBox runat="server" ID="can_delete" /></td>
                <td class="style1"><asp:CheckBox runat="server" ID="can_deleteall" /></td>
            </tr>
        </tbody>
    </table>
    <asp:Button ID="Button1" runat="server" Text="Salva" onclick="Button1_Click" />
    <div id="messaggio" runat="server" enableviewstate="false" style="color:#00FF00; font-weight:bold; text-align:center;"></div>
</asp:Content>
20 messaggi dal 11 giugno 2012
Non ci avevo pensato, magari l'errore è dentro il metodo Page_Load... il codice del metodo è questo:
string id_ut = Request.QueryString["id_ut"];
                string id_pr = Request.QueryString["id_pr"];
                System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["IntranetConnectionString"].ConnectionString);
                string sql = "SELECT can_read, can_write, can_update, can_update_all, can_delete, can_delete_all FROM Ute_Proc WHERE id_utente = @id_u AND id_procedura = @id_p";
                string sql2 = "SELECT username FROM Utenti WHERE id = @id";
                string sql3 = "SELECT nome FROM Procedura WHERE id = @id";
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlCommand cmd2 = new SqlCommand(sql2, conn);
                SqlCommand cmd3 = new SqlCommand(sql3, conn);
                cmd.CommandType = System.Data.CommandType.Text;
                cmd2.CommandType = System.Data.CommandType.Text;
                cmd3.CommandType = System.Data.CommandType.Text;

                cmd.Parameters.AddWithValue("@id_u", id_ut);
                cmd.Parameters.AddWithValue("@id_p", id_pr);
                cmd2.Parameters.AddWithValue("@id", id_ut);
                cmd3.Parameters.AddWithValue("@id", id_pr);
                conn.Open();
                string user;
                user = cmd2.ExecuteScalar().ToString();
                string proc;
                proc = cmd3.ExecuteScalar().ToString();
                SqlDataReader reader;
                reader = cmd.ExecuteReader();
                utente.Text = "<b>" + user.ToUpper() + "</b>";
                procedura.Text = "<b>" + proc.ToUpper() + "</b>";
                while (reader.Read())
                {
                    if (Convert.ToBoolean(reader[0]) == true)
                        can_read.Checked = true;
                    if (Convert.ToBoolean(reader[1]) == true)
                        can_write.Checked = true;
                    if (Convert.ToBoolean(reader[2]) == true)
                        can_update.Checked = true;
                    if (Convert.ToBoolean(reader[3]) == true)
                        can_updateall.Checked = true;
                    if (Convert.ToBoolean(reader[4]) == true)
                        can_delete.Checked = true;
                    if (Convert.ToBoolean(reader[5]) == true)
                        can_deleteall.Checked = true;
                }
                reader.Close();
20 messaggi dal 11 giugno 2012
Risolto! Il problema era nel behind code. Invece di inserirlo nel Page_Load l'ho inserito nel Page_LoadComplete, questo perché (credo) nel primo caso eseguiva prima il codice all'interno del Page_Load e poi l'evento lanciato nel bottone, nel secondo caso invece il contrario quindi prima il bottone e poi il caricamento dei valori.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.