Avatar billede Driton Seniormester
08. november 2010 - 12:32 Der er 6 kommentarer og
1 løsning

Min commandAgument virker ikke

Jeg koden som ser sådan ud her

oreach (Funktioner item in tempProfil.Funktioner)
        {
            SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select Id, Titel from Funktion values @Id, @Titel";
            conn.Open();
           
            Button myButton = new Button();
            myButton.Visible = true;
            myButton.Width = 123;
            myButton.Height = 30;
            myButton.ID = item.Id.ToString();
            myButton.Text = "Click";
            myButton.Text = item.Titel;
            myButton.CommandArgument = item.Id.ToString();
            myButton.Command += new CommandEventHandler(this.myButton_Click);
            myButton.Style.Add(HtmlTextWriterStyle.Margin, "4px");
            myButton.Style.Add(HtmlTextWriterStyle.MarginTop, "30px");
            myButton.Style.Add(HtmlTextWriterStyle.Padding,"5px");
            myButton.Style.Add(HtmlTextWriterStyle.FontSize, "12px");
           

            //this.Controls.Add(myButton);
            Panel1.Controls.Add(myButton);
           
           
            conn.Close();
           
            //("<br />" + myButton +item.ToString());
        }
}

private void LoginOgFunktioner()
{
        SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "LoginOgHentFuntioner";

        cmd.Parameters.Add("@brugernavn", SqlDbType.NVarChar, 4).Value = TextBox_un.Text;
       
        SqlParameter paramPassword = new SqlParameter();
        paramPassword.Value = TextBox_pw.Text;
        paramPassword.SqlDbType= SqlDbType.NVarChar;
        paramPassword.Size = 50;
        paramPassword.ParameterName = "@password";
        cmd.Parameters.Add(paramPassword);

        SqlParameter parameterRollenavn = cmd.Parameters.Add("@rollenavn", SqlDbType.NVarChar, 50);
        parameterRollenavn.Value = "nothing";
        parameterRollenavn.Direction = ParameterDirection.Output;

        List<Funktioner> Liste = new List<Funktioner>();

        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            Funktioner temp = new Funktioner();
            temp.Id = (int)reader["Id"];
            temp.Titel = reader["Titel"].ToString();
            Liste.Add(temp);
        }

        conn.Close();

        Profil profil = new Profil();
        profil.Rolle = parameterRollenavn.Value.ToString();
        profil.Navn = "Frank";
        profil.Funktioner = Liste;

        Session.Add("profil", profil);
        MultiView1.SetActiveView(View2);
}
       

    protected void myButton_Click(object sender, CommandEventArgs e)
    {
        //Funktioner temp = new Funktioner();
       
            switch(e.CommandArgument.ToString())
            {
                case "1":
                    MultiView1.SetActiveView(View_opretBruger);
                    break;
                case "2":
                    MultiView1.SetActiveView(View_sletBruger);
                    break;
                default:
                    MultiView1.SetActiveView(View1);
                    break;


         
        }
       
       
    }

Men til en eller anden grund så virker min switch case ikke.
jeg har prøvet at kører den, men min buttons argument kommer aldrig så langt til at overhovedet at kører min protected void myButton_Click(object sender, CommandEventArgs e)
Avatar billede aaberg Nybegynder
08. november 2010 - 12:41 #1
Den øverste kode, hvor din button bliver oprettet, kører den fra load eventet?
Avatar billede Driton Seniormester
08. november 2010 - 12:54 #2
Hele min kode ser sådan ud
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["profil"] == null)
        {
          MultiView1.SetActiveView(View1);
        }
        else
        {
            MultiView1.SetActiveView(View2);
        }
       
    }
    protected void Button_ok_Click(object sender, EventArgs e)
    {
      LoginOgFunktioner();   
      Visbuttons();
        }

private void Visbuttons()
{
        Profil tempProfil = (Profil)Session["profil"];
        Response.Write(tempProfil.Rolle.ToString());
         

          foreach (Funktioner item in tempProfil.Funktioner)
        {
            SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select Id, Titel from Funktion values @Id, @Titel";
            conn.Open();
           
            Button myButton = new Button();
            myButton.Visible = true;
            myButton.Width = 123;
            myButton.Height = 30;
            myButton.ID = item.Id.ToString();
            myButton.Text = "Click";
            myButton.Text = item.Titel;
            myButton.CommandArgument = item.Id.ToString();
            myButton.Command += new CommandEventHandler(this.myButton_Click);
            myButton.Style.Add(HtmlTextWriterStyle.Margin, "4px");
            myButton.Style.Add(HtmlTextWriterStyle.MarginTop, "30px");
            myButton.Style.Add(HtmlTextWriterStyle.Padding,"5px");
            myButton.Style.Add(HtmlTextWriterStyle.FontSize, "12px");
           

            //this.Controls.Add(myButton);
            Panel1.Controls.Add(myButton);
           
           
            conn.Close();
           
            //("<br />" + myButton +item.ToString());
        }
}

private void LoginOgFunktioner()
{
        SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "LoginOgHentFuntioner";

        cmd.Parameters.Add("@brugernavn", SqlDbType.NVarChar, 4).Value = TextBox_un.Text;
       
        SqlParameter paramPassword = new SqlParameter();
        paramPassword.Value = TextBox_pw.Text;
        paramPassword.SqlDbType= SqlDbType.NVarChar;
        paramPassword.Size = 50;
        paramPassword.ParameterName = "@password";
        cmd.Parameters.Add(paramPassword);

        SqlParameter parameterRollenavn = cmd.Parameters.Add("@rollenavn", SqlDbType.NVarChar, 50);
        parameterRollenavn.Value = "nothing";
        parameterRollenavn.Direction = ParameterDirection.Output;

        List<Funktioner> Liste = new List<Funktioner>();

        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            Funktioner temp = new Funktioner();
            temp.Id = (int)reader["Id"];
            temp.Titel = reader["Titel"].ToString();
            Liste.Add(temp);
        }

        conn.Close();

        Profil profil = new Profil();
        profil.Rolle = parameterRollenavn.Value.ToString();
        profil.Navn = "Frank";
        profil.Funktioner = Liste;

        Session.Add("profil", profil);
        MultiView1.SetActiveView(View2);
}
       

    protected void myButton_Click(object sender, CommandEventArgs e)
    {
        //Funktioner temp = new Funktioner();
       
            switch(e.CommandArgument.ToString())
            {
                case "1":
                    MultiView1.SetActiveView(View_opretBruger);
                    break;
                case "2":
                    MultiView1.SetActiveView(View_sletBruger);
                    break;
                default:
                    MultiView1.SetActiveView(View1);
                    break;


         
        }
       
       
    }

    private void SletBruger()
    {
       
    }

    private void OpretBruger()
    {
       
    }

    protected void Button_logud_Click(object sender, EventArgs e)
    {
        Session.RemoveAll();
        MultiView1.SetActiveView(View1);


    }
}
Avatar billede Driton Seniormester
08. november 2010 - 12:54 #3
Men ellers ja
Avatar billede neoman Novice
08. november 2010 - 13:25 #4
aaberg_cc har fat i det rigtige - du gendanner ikke knappen på pageload. Dynamisk-tilføjede kontroller skal gendannes ved postback, allersenest i Page_Load. Den button du evt ser er ikke gift med sin eventhandler efter postback, og derfor sker der ingenting.
Avatar billede Driton Seniormester
08. november 2010 - 14:00 #5
Jeg har fundet problemet, min page_load kan ikke huske om min buttons er oprettet, så derfor skulle jeg oprette en method fra line 34- til conn.Close og de 2 sidste }} og så fik og så fik jeg en opret_buttons som jeg fik skrevet inde i else sådan her
else
        {
            MultiView1.SetActiveView(View2);
            opret_buttons();
        }
oppe i page_load og så virkede det, det var også måske det i sagde, men tak for det hele
Avatar billede neoman Novice
08. november 2010 - 14:07 #6
Det er en lidt underlig løsning du har der. Hvis du altid opretter dine buttons i pageload, så er de permanent på siden - hvorfor bliver de oprettet dynamisk og ikke statisk?

Du har Page.IsPostback property'en du kan teste på i Page Load, og hvis du så har oprettet knappen, så skal du huske det et eller andet sted og genoprette den  igen i Page Load når Page.IsPostback=True
Avatar billede arne_v Ekspert
09. november 2010 - 02:00 #7
Hvad gør:

cmd.CommandText = "select Id, Titel from Funktion values @Id, @Titel";

????
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester