ZaimanMedlem sedan dec. 20014 239 inlägg Sitter och funderar på hur jag ska få till en sak.
Har en gridview och i den en knapp. Knappen ska bara vara visad om administratören är inloggad. Men hur får jag tag på knappen som ligger i griden?
Försökt söka, men vet inte riktigt på vad jag ska söka efter.
Luddigt?
CatZMedlem sedan jan. 20022 440 inlägg Det enklast är att ha kontrollen i en templatefield, då kan du köra en FindControl i OnRowDataBound
protected void gvResults_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (!User.IsInRole("DinRoll") | (!User.IsInRole("DinAndraRoll")))
{
lb = (LinkButton) GridView1.FindControl("DinKnapp");
lb.Enabled = false;
lb.Visible = false;
}
}
CatZMedlem sedan jan. 20022 440 inlägg Bättre ändå är väl att ha knappen som osynlig från start och sedan göra den synlig om anvädaren har ett visst värde i session / roller / kakor
ZaimanMedlem sedan dec. 20014 239 inlägg
CatZ skrev:
Bättre ändå är väl att ha knappen som osynlig från start och sedan göra den synlig om anvädaren har ett visst värde i session / roller / kakor
Jepps, det var så jag hade tänkt styra det.
ZaimanMedlem sedan dec. 20014 239 inlägg Hmm.. Det sket sig..
Förmodligen på grund av min Membership provider för MySQL, ska prova byta ut den mot den som finns med i 5.1.4 versionen.
Återkommer när jag gjort det, kan ta en stund....
CatZMedlem sedan jan. 20022 440 inlägg Vad har du för kod? Felmeddelande? Vi finns här och kan hjälpa till ;)
ZaimanMedlem sedan dec. 20014 239 inlägg Felmeddelandet:
Object reference not set to an instance of an object
Hjälpte inte att byta provider.
CatZMedlem sedan jan. 20022 440 inlägg japp japp det är för att den inte hittar knappen... kör du en FindControl? I så fall måste du ha det som TemplateField i GridViewn och namnge din knapp.
Så när du kommer till lb.Enabled = true; så är lb = null därför får du felmeddelandet.
ZaimanMedlem sedan dec. 20014 239 inlägg Snyft.. Men det är ju så jag har det.
Eller fungerar det inte på en ImageButton?
Modifierade koden som gavs tidigare:
if (User.IsInRole("blagruppen"))
{
ImageButton lb = (ImageButton)GridView1.FindControl("btnAdminDelete");
// lb.Enabled = false;
lb.Visible = true;
}
freguzMedlem sedan feb. 2005280 inlägg Kan man få se all relevant kod så kanske det gingo att lista ut något ;-)
ZaimanMedlem sedan dec. 20014 239 inlägg Codebehind:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class guestbook : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SkrivGB.Visible = false;
}
protected void Button2_Click(object sender, EventArgs e)
{
if (SkrivGB.Visible == false)
{
SkrivGB.Visible = true;
GridView1.Visible = false;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string mess = txtMeddelande.Text.TrimEnd();
string namn = txtNamn.Text.TrimEnd();
string ip = Request.UserHostAddress.ToString();
DateTime t = System.DateTime.Now;
EdcTableAdapters.gbookTableAdapter p = new EdcTableAdapters.gbookTableAdapter();
p.addPost(namn, ip, mess, t);
GridView1.DataBind();
GridView1.Visible = true;
p.Dispose();
}
protected void btnAvbryt_Click(object sender, EventArgs e)
{
SkrivGB.Visible = false;
GridView1.Visible = true;
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (User.IsInRole("Administrators"))
{
ImageButton lb = (ImageButton)GridView1.FindControl("btnAdminDelete");
// lb.Enabled = false;
lb.Visible = true;
}
}
protected void GridView1_PreRender(object sender, EventArgs e)
{
}
}
.aspx sidan
<%@ Page Language="C#" MasterPageFile="~/Masterpages/MasterPage.master" AutoEventWireup="true" CodeFile="guestbook.aspx.cs" Inherits="guestbook" Title="Eskilstuna dykcenter Gästbok" Debug="false" Theme="edctheme" ValidateRequest="false" %>
<%@ Register TagPrefix="FTB" Namespace="FreeTextBoxControls" Assembly="FreeTextBox" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
<br />
<script type="text/javascript" src="gbook.js"></script>
<div style="width: 740px; height: 25px; text-align: left">
<asp:Button ID="btnSkriv" runat="server" EnableViewState="False" OnClick="Button2_Click" Text="Skriv i gästboken" SkinID="edcButton" />
</div>
<asp:Panel ID="SkrivGB" runat="server" Width="691px" HorizontalAlign="Left" ScrollBars="Auto" Wrap="False">
<div style="border-right: gray 1px dashed; border-top: gray 1px dashed; border-left: gray 1px dashed;
border-bottom: gray 1px dashed">
<table>
<tr>
<td style="width: 94px; height: 21px">
Namn:
<asp:TextBox ID="txtNamn" runat="server" EnableViewState="False" MaxLength="40" Width="335px"></asp:TextBox>
<asp:RequiredFieldValidator ID="validateNamn" runat="server" ControlToValidate="txtNamn"
ErrorMessage="Du måste ange ett namn!" SetFocusOnError="True" Width="393px"></asp:RequiredFieldValidator></td>
<td style="width: 220px; height: 21px">
</td>
</tr>
<tr>
<td style="height: 21px" colspan="2">
Meddelande:<FTB:FreeTextBox id="txtMeddelande" runat="server" AllowHtmlMode="False" Language="sv-se" Width="600" Height ="300" EnableViewState="False" RenderMode="Rich" toolbarlayout="FontFacesMenu,FontForeColorsMenu,FontForeColorPicker,FontBackColorsMenu,FontBackColorPicker|Bold,Italic,Underline,Strikethrough,Insert Image from gallery" EnableHtmlMode="False" ImageGalleryPath="~/images/Smiley" ImageGalleryUrl="gb.imagegallery.aspx?rif={0}&cif={0}" SupportFolder="~/aspnet_client/FreeTextBox/"></FTB:FreeTextBox>
<asp:RequiredFieldValidator ID="validateMeddelande" runat="server" ControlToValidate="txtMeddelande"
ErrorMessage="Du måste ju skriva något också!" SetFocusOnError="True" Width="600px"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<td style="width: 94px; height: 21px">
<asp:Button ID="btnAvbryt" runat="server" OnClick="btnAvbryt_Click" Text="Avbryt / Visa inlägg" SkinID="edcButton" CausesValidation="False" /></td>
<td style="width: 220px; height: 21px; text-align: right">
<asp:Button ID="Button1" runat="server" Text="Spara" OnClick="Button1_Click" SkinID="edcButton" /></td>
</tr>
</table>
</div>
</asp:Panel>
<br />
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
DataSourceID="ObjectDataSource1" GridLines="None" Height="283px" PageSize="5"
Width="662px" OnRowDataBound="GridView1_RowDataBound" OnPreRender="GridView1_PreRender">
<PagerSettings Mode="NumericFirstLast" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table border="0" cellpadding="0" cellspacing="0" class="photo-frame" style="width: 70%">
<tr>
<td class="topx--" style="height: 4px; witdh: 1px">
</td>
<td class="top-x-" style="width: 1px; height: 4px">
</td>
<td class="top--x" style="height: 4px">
</td>
</tr>
<tr>
<td class="midx--" style="witdh: 1px">
</td>
<td style="text-align: right">
<table style="width: 406px">
<tr>
<td class="smallText" style="text-align: left">
Från
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Namn") %>' CssClass="smallText"></asp:Label>:</td>
</tr>
<tr>
<td style="height: 21px; text-align: left;">
<asp:Label ID="Meddelandet" runat="server" CssClass="smallText" Text='<%# Bind("meddelande") %>'></asp:Label></td>
</tr>
<tr>
<td style="height: 21px; text-align: right">
<asp:Label ID="Datum" runat="server" CssClass="minTextKursiv" Text='<%# Bind("datum") %>' Font-Italic="True"></asp:Label></td>
</tr>
</table>
<asp:ImageButton ID="btnAdminDelete" runat="server"
ImageUrl="~/Images/btn-radera.gif" Visible='False' /></td>
<td class="mid--x">
</td>
</tr>
<tr>
<td class="botx--" style="height: 4px; witdh: 1px">
</td>
<td class="bot-x-" style="height: 4px">
</td>
<td class="bot--x" style="height: 4px">
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData" TypeName="EdcTableAdapters.gbookTableAdapter" InsertMethod="Insert" OldValuesParameterFormatString="original_{0}">
<InsertParameters>
<asp:Parameter Name="Namn" Type="String" />
<asp:Parameter Name="epost" Type="String" />
<asp:Parameter Name="ip" Type="String" />
<asp:Parameter Name="meddelande" Type="String" />
<asp:Parameter Name="smiley" Type="String" />
<asp:Parameter Name="datum" Type="DateTime" />
<asp:Parameter Name="Websida" Type="String" />
</InsertParameters>
</asp:ObjectDataSource>
</asp:Content>
All kod som den ser ut idag. Hoppas jag inte missat något.
CatZMedlem sedan jan. 20022 440 inlägg Enkelt eftersom du postar koden, hade inte behövt hela men men :)
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (User.IsInRole("Administrators"))
{
ImageButton lb = (ImageButton)GridView1.FindControl("btnAdminDelete");
// lb.Enabled = false;
lb.Visible = true;
}
{
du måste ange vilken typ av rad den ska söka på! om du glömmer det blir det bajs :)
En fråga? Nu blir det två ;) Är det någon särskild anledning som gör att du krånglar med <table> och skit i din gridview? Det känns extremt dumt för mig. GridView sköter ju allt sånt automatiskt.
freguzMedlem sedan feb. 2005280 inlägg SKulle tro att i din RowDataBound() först måste kolla vilken typ av rad det är innan du kan leta upp den ImageButtonen (bra språk),
typ
if(e.Row.RowType == DataControlRowType.DataRow)
ZaimanMedlem sedan dec. 20014 239 inlägg Fungerar inte heller :(
Samma fel...
CatZMedlem sedan jan. 20022 440 inlägg
Zaiman skrev:
Fungerar inte heller :(
Samma fel...
Det är för att du inte läst på om GridView...
http://www.asp.net/learn/videos/video-07.aspx
http://www.asp.net/learn/data-access/
Sist och absolut viktigast!
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview(VS.80).aspx
ZaimanMedlem sedan dec. 20014 239 inlägg Hehe.. Det var inte lite att läsa ;)
Ska klura lite till.. :)
ZaimanMedlem sedan dec. 20014 239 inlägg Just ja, table frågan. Det är mest för att jag inte fick till designen som det blev så.
CatZMedlem sedan jan. 20022 440 inlägg Har kollat lite på koden i Visual Studio, det var så knepigt att läsa den långa koden här. Du använder verkligen gridviewn som en repeater. Jag rekommenderar att du istället använder den som en gridview eller byter till en bättre lämpad kontroll om du vill ha mer kontroll över html'n. Om du kollar längst ner så har jag style:at mina rader olika beroende på vilken typ av rad det är. GridViewn har fullkomligt css-stöd vad jag vet. Du får göra som du vill men som det är nu tycker jag det blir svårt att hålla koll på vad som är vad i ditt itemtemplate vilket innebär att det kommer vara svårt för dig att underhålla det också.
Bifogar en kodsnutt på hur jag har gjort:
<asp:gridview runat="server" id="gvResults" autogeneratecolumns="False"
cssclass="styleGridView" onrowdatabound="gvResults_RowDataBound"
CellPadding="2" AllowPaging="True" ondatabound="gvResults_DataBound"
DataKeyNames="ID" onselectedindexchanged="gvResults_SelectedIndexChanged"
allowselection="true" GridLines="None">
<Columns>
<asp:CommandField SelectText="Detaljer" ShowSelectButton="True" />
<asp:boundfield DataField="ID" HeaderText="ID"
ReadOnly="false" SortExpression="ID" Visible="False"></asp:boundfield>
<asp:boundfield DataField="pDate" HeaderText="Datum"
SortExpression="pDate" DataFormatString="{0:d}" HtmlEncode="False"></asp:boundfield>
<asp:BoundField DataField="Type" HeaderText="Spelform" SortExpression="Type" />
<asp:templatefield HeaderText="FileName" Visible="false">
<itemtemplate>
<asp:Label ID="lblFileID" runat="server" Text='<%# Eval("FileID") %>'></asp:Label>
</itemtemplate>
</asp:templatefield>
<asp:TemplateField HeaderText="Resultat">
<ItemTemplate>
<asp:LinkButton ID="lbtnGvGetResult" runat="server" CausesValidation="False"
CommandName="Resultat" oncommand="lbtnGvGetResult_Command" Text="Resultat"
CommandArgument='<%# Eval("FileID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/images/first.gif"
CommandArgument="First" CommandName="Paginate" oncommand="Paginate" />
<asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/images/previous.gif"
CommandArgument="Prev" CommandName="Paginate" oncommand="Paginate" />
Page
<asp:DropDownList ID="ddlPages" runat="server"
AutoPostBack="True" onselectedindexchanged="ddlPages_SelectedIndexChanged">
</asp:DropDownList>
of
<asp:Label ID="lblPageCount"
runat="server"></asp:Label>
<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="~/images/next.gif"
CommandArgument="Next" CommandName="Paginate" oncommand="Paginate" />
<asp:ImageButton ID="ImageButton4" runat="server" ImageUrl="~/images/last.gif"
CommandArgument="Last" CommandName="Paginate" oncommand="Paginate" />
</PagerTemplate>
<footerstyle cssclass="styleGridFooter" />
<rowstyle cssclass="styleGridRow" />
<SelectedRowStyle CssClass="styleGridSelected" />
<headerstyle cssclass="styleGridHeader" />
<alternatingrowstyle cssclass="styleGridAltRow" />
</asp:gridview>
ZaimanMedlem sedan dec. 20014 239 inlägg Du har så rätt, men när jag började koda så var jag slö och vill dra nytta av "pageing" i gridviewn. (konstig mening). Slött dåligt och ruttet av mig. Men jag har lärt mig med tiden och kommit en bit vidare (ingen ursäkt för dålig kodning).
Ska mecka om den vid tillfälle.
ZaimanMedlem sedan dec. 20014 239 inlägg if (e.Row.RowType == DataControlRowType.DataRow)
{
if (User.IsInRole("Administrators"))
{
ImageButton lb = (ImageButton)e.Row.FindControl("btnAdminDelete");
lb.Visible = true;
}
}