Hej! Lös det via codebehind istället.. jag vill unvika codebehind i detta läget beronde på en del annat på sidan. Varför vill du inte skriva logiken i din codebehind-fil? Att inte vilja följa best practise är antagligen ett tecken på att något annat är "felaktigt" implementerat...? Jag antar att användar id skall vara lägre än tre? Tack Andreas!Lite Dataview problem
I mitt admin gränssnitt så kollar jag vilken status man har. Beroende på status så skall man se olika mycket av en viss data som visas i gridview. Tanken är att om man har status <3 så ser man bara sina inlägg men har man status > 3 så skall man se alla.
så här hade jag tänkt lösa det, men det fungerar så klart inte.
<code>
<td colspan="2" rowspan="3" style="width: 1102px; height: 300px" valign="top">
<%
int sStatus = int.Parse(Session["anvandarid"].ToString());
string DS = "";
if (sStatus < 3)
{
DS = "ds1";
%>
<asp:AccessDataSource ID="ds1" runat="server"
DataFile = "~/Gripenbat.mdb"
SelectCommand = "SELECT a.ID, a.regtime,a.atid, a.stoptime, a.rubrik, a.antalsvar, b.Avdelning, (c.fnamn + ' ' + c.enamn) as Name, d.plats from ovningar a, avdelningar b, anvandare c, plats d Where b.ID = a.avdelning AND c.ID= a.ovnled AND d.ID = a.plats AND a.ovnled = @anvandarid Order by Regtime"
DeleteCommand = "DELETE FROM ovningar WHERE ID=@ID;">
<SelectParameters>
<asp:SessionParameter Name="anvandarid" SessionField="anvandarid" Type="int32" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="ID" Type=int32 />
</DeleteParameters>
</asp:AccessDataSource>
<% }
else
{
DS = "ds2";
%>
<asp:AccessDataSource ID="ds2" runat="server"
DataFile = "~/Gripenbat.mdb"
SelectCommand = "SELECT a.ID, a.regtime,a.atid, a.stoptime, a.rubrik, a.antalsvar, b.Avdelning, (c.fnamn + ' ' + c.enamn) as Name, d.plats from ovningar a, avdelningar b, anvandare c, plats d Where b.ID = a.avdelning AND d.ID = a.plats AND c.ID= a.ovnled Order by Regtime"
DeleteCommand = "DELETE FROM ovningar WHERE ID=@ID;">
<SelectParameters>
<asp:SessionParameter Name="anvandarid" SessionField="anvandarid" Type="int32" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="ID" Type=int32 />
</DeleteParameters>
</asp:AccessDataSource>
<%
}
%>
<asp:GridView ID="grdOvningar" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" DataSourceID="<&= DS %>"
</code>
hur skall jag lösa detta. Jag vill inte använda codebehind av vissa anledningar, men går detta att lösa
/TyronneSv: Lite Dataview problem
så att beroende på användarens status så fyller du datagriden osv med dess rätta data, alltså olika SelectCommands i detta fall... antar jag!Sv:Lite Dataview problem
Kan man inte lösa det på sidan som jag önskar?
/tyronneSv: Lite Dataview problem
Jag tror att den bästa lösningen för dig är att ta reda på användarens status och därefter hämta poster med olika SELECT-satser från databasen beroende på vilka poster som ska visas för den aktuella användaren. Bind därefter denna datakälla till din presentationskontroll (i codebehind-filen).Sv: Lite Dataview problem
Du skulle likväl kunna göra det med bara en SQL fråga genom:
WHERE (@anvandarid < 3) AND (a.ovnled = @anvandarid)
Så då kan du förenkla det till:
<td colspan="2" rowspan="3" style="width: 1102px; height: 300px" valign="top">
<asp:AccessDataSource ID="ds1" runat="server"
DataFile = "~/Gripenbat.mdb"
SelectCommand = "SELECT a.ID, a.regtime,a.atid, a.stoptime, a.rubrik, a.antalsvar, b.Avdelning, (c.fnamn + ' ' + c.enamn) as Name, d.plats FROM ((ovningar a INNER JOIN avdelningar b ON a.avdelning = b.ID) INNER JOIN anvandare c ON a.ovnled = c.ID) INNER JOIN plats d ON a.plats = d.ID WHERE (@anvandarid < 3) AND (a.ovnled = @anvandarid) ORDER BY Regtime"
DeleteCommand = "DELETE FROM ovningar WHERE ID=@ID;">
<SelectParameters>
<asp:SessionParameter Name="anvandarid" SessionField="anvandarid" type="int32" />
</SelectParameters>
<DeleteParameters>
<asp:Parameter Name="ID" Type=int32 />
</DeleteParameters>
</asp:AccessDataSource>
<asp:GridView ID="grdOvningar" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None" DataSourceID="ds1"
Det ser ut som du skapar en anslutning i varje sida. Vad händer då om du skall ändra anslutningen? Måste du då inte gå in p alla sidor?
JAg tror det finns en möjlighet att kunna misbruka DeleteCommand från griden. Bör kanske ha med en validering för detta med. Komtroller att det är den som är inloggad eller administratör.
Kan duoxå göra i SQL satsen.
P.S.
Vad gäller för användar med id 3?
Antar att den inte existerar.
D.S.
Sv:Lite Dataview problem
Jag brukar använda en klass som hanterar databas anslutning.
/Tyronne