---
title: "Knapp i GridView prerender"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/168267-knapp-i-gridview-prerender"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Zaiman"
published: "2008-01-20T20:36:51.000Z"
updated: "2008-01-22T12:49:49.000Z"
replies: 22
views: 1104
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/168267-knapp-i-gridview-prerender"
---

# Knapp i GridView prerender

_Sida 1 av 2._

## #1 — Zaiman, 2008-01-20T20:36Z

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?

Permalänk: https://www.webforum.nu/p/168267

## #2 — CatZ, 2008-01-20T20:51Z

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;
	}
}
```

Permalänk: https://www.webforum.nu/p/2071672

## #3 — CatZ, 2008-01-20T20:57Z

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

Permalänk: https://www.webforum.nu/p/2071675

## #4 — Zaiman, 2008-01-20T20:59Z

> **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.

Permalänk: https://www.webforum.nu/p/2071677

## #5 — Zaiman, 2008-01-20T22:01Z

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....

Permalänk: https://www.webforum.nu/p/2071691

## #6 — CatZ, 2008-01-21T09:51Z

Vad har du för kod? Felmeddelande? Vi finns här och kan hjälpa till ;)

Permalänk: https://www.webforum.nu/p/2071733

## #7 — Zaiman, 2008-01-21T21:32Z

Felmeddelandet:

```
Object reference not set to an instance of an object
```

Hjälpte inte att byta provider.

Permalänk: https://www.webforum.nu/p/2071918

## #8 — CatZ, 2008-01-21T21:36Z

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.

Permalänk: https://www.webforum.nu/p/2071921

## #9 — Zaiman, 2008-01-21T21:42Z

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;
        }
```

Permalänk: https://www.webforum.nu/p/2071922

## #10 — freguz, 2008-01-21T21:45Z

Kan man få se all relevant kod så kanske det gingo att lista ut något ;-)

Permalänk: https://www.webforum.nu/p/2071923

## #11 — Zaiman, 2008-01-21T21:51Z

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">
        &nbsp; &nbsp;&nbsp;
        <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:&nbsp;
                        <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">
                        &nbsp;</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>
    &nbsp; &nbsp;&nbsp; &nbsp;<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">
                        &nbsp;<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>
    &nbsp; &nbsp; &nbsp;
    <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.

Permalänk: https://www.webforum.nu/p/2071924

## #12 — CatZ, 2008-01-21T21:58Z

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.

Permalänk: https://www.webforum.nu/p/2071925

## #13 — freguz, 2008-01-21T21:59Z

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)
```

Permalänk: https://www.webforum.nu/p/2071927

## #14 — Zaiman, 2008-01-21T22:01Z

Fungerar inte heller :(
Samma fel...

Permalänk: https://www.webforum.nu/p/2071928

## #15 — CatZ, 2008-01-21T22:04Z

> **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**

Permalänk: https://www.webforum.nu/p/2071929

## #16 — Zaiman, 2008-01-21T22:08Z

Hehe.. Det var inte lite att läsa ;)

Ska klura lite till.. :)

Permalänk: https://www.webforum.nu/p/2071932

## #17 — Zaiman, 2008-01-21T22:10Z

Just ja, table frågan. Det är mest för att jag inte fick till designen som det blev så.

Permalänk: https://www.webforum.nu/p/2071933

## #18 — CatZ, 2008-01-21T22:10Z

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>
```

Permalänk: https://www.webforum.nu/p/2071934

## #19 — Zaiman, 2008-01-21T22:17Z

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.

Permalänk: https://www.webforum.nu/p/2071936

## #20 — Zaiman, 2008-01-21T23:07Z

```
 if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (User.IsInRole("Administrators"))
            {
                ImageButton lb = (ImageButton)e.Row.FindControl("btnAdminDelete");
                lb.Visible = true;
            }
        }
```

Permalänk: https://www.webforum.nu/p/2071943

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/168267-knapp-i-gridview-prerender  
Nästa sida: https://www.webforum.nu/amne/dotnet/168267-knapp-i-gridview-prerender/page2.md
