19. februar 2008 - 21:03Der 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.
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
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
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.
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.
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
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();
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.