Avatar billede set Nybegynder
19. februar 2008 - 21:03 Der er 8 kommentarer og
1 løsning

If else i en .aspx fil

Jeg har et gridview hvor jeg har hentet data fra en sqldatabase.
Jeg har bl.a. lavet en button i gridden som skal være forskellig alt efter om det er admin eller bruger der logger ind.
Jeg har forsøgt med flg.


<asp:TemplateField ShowHeader="False">
  <ItemTemplate>
    <% if /// her mgl. jeg noget kode  \\\  >  Status2") > 10){ %>
      <asp:Button ID="Admin" runat="server" OnClick="cmdMedlem_Click" CausesValidation="false" Text="Se / Ret" CssClass="tekstgreen3" />
    <% }else {%>
      <asp:Button ID="Bruger" runat="server" OnClick="cmdMedlem_Click" CausesValidation="false" Text="Se" CssClass="tekstgreen3" />
    <% } %>
  </ItemTemplate>
  <ControlStyle CssClass="tekstgreen3" />
  <HeaderStyle CssClass="header" />
  <ItemStyle CssClass="table" />
</asp:TemplateField>

Jeg ved ikke om det den rigtige fremgangsmåde.

Jeg er heller ikke nogen nørd ud i C# men jeg prøver mig frem.

Håber der er nogen der kan hjælpe.
Avatar billede 2c Nybegynder
19. februar 2008 - 21:13 #1
ellers kan du i din pageload funktion kalde noget ala

if(User.IsInRole("Admin"))
Button.Visible = true;
else
Button.Visible = false;
Avatar billede 2c Nybegynder
19. februar 2008 - 21:15 #2
eller jeg mender:
if(User.IsInRole("Admin"))
{
Admin.visible=true;
Button.visible = false;
}
else
{
Admin.visible=false;
Button.visible = true;
}
Avatar billede set Nybegynder
19. februar 2008 - 21:29 #3
Jeg har ikke nogen roller til i databasen, idet det er et tal der afgør om man har administrator rettigheder. Jeg kan ikke lave om på databasen, idet den er landsdækkene så alle andre skal lave om på deres kode hvis databasen skal laves om.
Så udvælgelsen skal foregå på en anden måde.

Har websiden kørende i asp for øjeblikket, hvor det er nemmere at lave forespørgslerne, men vi vil gerne have lavet siden om til .net.

Det der volder mig problemmer er at få skilt koden fra aspx filen og over i aspx.cs filen
Avatar billede mikalj Nybegynder
20. februar 2008 - 11:32 #4
I codebehind laver du en property der returnerer returnerer admin status.

protected int AdminStatus
{
    get
    {
        if( /* test her */ )
            return 1;
        else
            return 0;
        /* Du kan skrive din egen kode her og returnerer */
        /* lige så mange forskellige værdier som der er behov for */
    }
}

i din aspx fil kan du så bruge følgende til at skjule eller vise en knap der er inde i dit gridview

<asp:Button ID="Admin" runat="server" OnClick="cmdMedlem_Click"
    Visible='<%# AdminStatus == 1 %>'
    CausesValidation="false" Text="Se / Ret" CssClass="tekstgreen3" />

<asp:Button ID="Bruger" runat="server" OnClick="cmdMedlem_Click"
    Visible='<%# AdminStatus == 0 %>'
    CausesValidation="false" Text="Se" CssClass="tekstgreen3" />

På den her måde, får du kun en smule kode i din markup.
Alternativt kan du i dit gridview's ItemCreated event, finde knappen, og sætte den synlig/usynlig 100% fra codebehind.
Jeg kan godt lave et eksempel på det hvis du ønsker.
Avatar billede set Nybegynder
20. februar 2008 - 17:21 #5
Mange tak for løsningen.

Det virker fint. Endnu et spørgsmål til emnet.

Hvordan kan man så lave det så det virker på den enkelte record?

Dette fordi medlemmet skal kunne rette i sine egne data, men kun se andres data d.v.s
når medlemmet er logget ind og går til medlemsoversigten kan der vælges mellem alle medlemmer, men der kan kun rettes i egne oplysninger.
Det lyder lidt specielt, men det er fordi vi er et netværk der hjælper hinanden med at finde jobs, så det er praktisk at kunne se andre medlemmers profil hvis der skulle komme noget der kunne bruges af andre end en selv.
Håber dette vil kunne forklare lidt af det specielle problem jeg er rendt ind i.

Jeg kan også godt bruge et eksempel på gridview's ItemCreated event du snakker om idet jeg ikke har fundet ud af hvordan man trækker data ud af et dataset så man kan se den enkelte records  dataceller f. eks. fornavn / efternavn / adresse eller lignende.
På forhånd mange tak.
Avatar billede mikalj Nybegynder
20. februar 2008 - 18:50 #6
I din Markup

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="ButtonAdmin" runat="server" Text="Se/Ret" />
                <asp:Button ID="ButtonBruger" runat="server" Text="Se" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


I din codebehind
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // RowDataBound bliver udført for hver række i gridviewet
    // så har du 10 rækker, bliver det udført 10 gange

    // tjek at det er en data row, altså ikke header, footer, pager
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // Få fat i den dataitem som der er brugt til at befolke denne række med data
        // Bemærk: dette er "DataRowView" hvis du bruger en sqldatasource
        //        men kan være en anden type afhængig af din datakilde
        DataRowView dataitem = (DataRowView)e.Row.DataItem;

        // Få fat i de to knapper vha. FindControl, Brug knappernes ID som angivet i din markup
        Button btnAdmin = (Button)e.Row.FindControl("ButtonAdmin");
        Button btnBruger = (Button)e.Row.FindControl("ButtonBruger");

        // er brugeren en administrator eller er det brugerens egen række
        // så gør "Se/Ret" knappen synlig
        if (AdminStatus == 1 || BrugerId == Convert.ToInt32(dataitem["brugerid"]))
        {
            btnAdmin.Visible = true;
            btnBruger.Visible = false;
        }
        else
        {
            btnAdmin.Visible = false;
            btnBruger.Visible = true;
        }
    }
}

Bemærk at jeg har brugt RowDataBound, fordi det passer bedre her, istedet for RowCreated (eller itemcreated som jeg fejlagtigt kaldte det)

Desuden er det lidt ekstra om linien
BrugerId == Convert.ToInt32(dataitem["brugerid"])

BrugerId skal være en property eller variabel som indeholder den nuværende brugers ID
mens "brugerid" skal være navnet på det felt i din sql forespørgsel som indeholder en brugers id
Avatar billede set Nybegynder
20. februar 2008 - 19:44 #7
Mange tak
Kan dette også bruges på labels?

Jeg vil godt give flere point for svar.
Avatar billede mikalj Nybegynder
20. februar 2008 - 23:13 #8
Det kan bruges på ALLE controls du putter i dit gridview, labels, dropdownlists, images, datasources, andre gridviews.

point er ikke nødvendig, gør ikke voldsom meget op i dem, bare glad for at kunne hjælpe
Avatar billede set Nybegynder
20. februar 2008 - 23:28 #9
Jeg siger mange tak.

Jeg har rodet lidt med den kode om admin jeg fik tidligere og lagt deni men egen komponent og det virker nu.
Koden ser sådan ud:


        /* Her finder man ud af om man er administrator eller menigt medlem  */
        public int AdminStatus
        {
            get
            {
                int Status;

                // Consult with your SQL Server administrator for an appropriate connection
                // string to use to connect to your local SQL Server.
                conn = new SqlConnection(connectionString);
                conn.Open();

                // Create SqlCommand to select adminstaror field from users table given supplied userName.
                cmd = new SqlCommand("Select status2 from tblBruger6000Web where Brugernavn=" + User.Identity.Name, conn);

                reader = cmd.ExecuteReader();
                reader.Read();

                StringBuilder sb = new StringBuilder();
                sb.Append(reader["Status2"]);

                Status = Convert.ToInt32(sb.ToString());

                // Cleanup command and connection objects.
                cmd.Dispose();
                conn.Dispose();

                if (Status > 10)
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
        }
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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