webForumDet fria alternativet

Hittar inte kontroller i Repeater

.NET

3 svar · 306 visningar · startad av edebro

Medlem sedan aug. 2001261 inlägg
Frågan#1

Jag har följande kod, som fungerar fint;

<%@ Page Language="C#" %>
<%@ import namespace="System.Data" %>
<%@ import namespace="System.Data.OleDb" %>

<script language="C#" runat="server">
public void Page_Load(Object src,EventArgs e) {
	OleDbConnection objConn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source= C:\Inetpub\work\ufk\wwwroot\test\paging\repeaterpaging.mdb");
	OleDbDataAdapter objCommand=new OleDbDataAdapter("select * from Products",objConn);
	DataSet ds=new DataSet();
	objCommand.Fill(ds);

	PagedDataSource objPds = new PagedDataSource();
	objPds.DataSource = ds.Tables[0].DefaultView;
	objPds.AllowPaging = true;
	objPds.PageSize = 5;
	int CurPage;
	if (Request.QueryString["Page"] != null)
		CurPage=Convert.ToInt32(Request.QueryString["Page"]);
	else
		CurPage=1;

	objPds.CurrentPageIndex = CurPage-1; 
	lblCurrentPage.Text = "Page " + CurPage.ToString() + " of " + objPds.PageCount;

	if (!objPds.IsFirstPage)
		lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1);

	if (!objPds.IsLastPage)
		lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurPage+1);

	Repeater1.DataSource=objPds;
	Repeater1.DataBind();
}
</script>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>

<form name="form1" method="POST" runat="server">
	<table width="100%" border="0">
	<tr><td>
		<asp:Label id="lblCurrentPage" runat="server" />
	</td></tr>
	<tr><td>
		<asp:HyperLink id="lnkPrev" runat="server"><< Prev</asp:HyperLink>
		<asp:HyperLink id="lnkNext" runat="server">Next >></asp:HyperLink>
	</td></tr>
	</table>
	
	<asp:Repeater id="Repeater1" runat="server">
		<itemtemplate>
			<table width="100%" border="0">
			<tr><td><%# DataBinder.Eval(Container.DataItem, "Product") %></td></tr>
			<tr><td>&nbsp;</td></tr>
			</table>
		</itemtemplate>
	</asp:repeater>
</form>
</body>
</html>

Grejen är bara att jag måste ha kontrollerna lnkPrev, lnkNext och lblCurrentPage inne i repeatern, nämligen i <footertemplate>.
Det är nu problem uppstår. Den ger mig felmeddelandet;

Kompilatorfelmeddelande: CS0246: Det gick inte att hitta typ- eller namnområdesnamnet lblCurrentPage (saknas ett using-direktiv eller en sammansättningsreferens?)

På raden;

lblCurrentPage.Text = "Sida " + CurPage.ToString() + " av " + objPds.PageCount();

Den hittar altså inte kontrollerna om jag lägger dom i Repeatern.
Hur ska man lösa detta?

Medlem sedan mars 2000126 inlägg
#2

Navigering

Tjena.
Bara en fundering. Varför måste du ha den i repeatern?
Kan du inte lägga den efter repeatern inom formtaggen så ser det väl likadant ut.

La ut en test:
http://www.broskan.se/edebro

<style>
.tbl_nav{font-size:12px; font-weight:bold; font-family:verdana; color:white; background-color:#000088;}
.tbl_contents{border:1px #000088 solid; font-size:12px; font-weight:bold; font-family:verdana; color:#000088; background-color:#eeeeee;}
</style>
</head>
<body>

<form name="form1" method="POST" runat="server">
	
	
	<asp:Repeater id="Repeater1" runat="server">
		<itemtemplate>
			<table width="150" cellpadding="4" cellspacing="0" border="0" class="tbl_contents">
			<tr><td><%# DataBinder.Eval(Container.DataItem, "tippare") %></td></tr>
			<tr><td> </td></tr>
			</table>
		</itemtemplate>
	</asp:repeater>
	<table width="150" cellpadding="2" cellspacing="0" border="0" class="tbl_nav">
	<tr><td>
		<asp:Label id="lblCurrentPage" runat="server" />
	</td></tr>
	<tr><td>
		<asp:HyperLink id="lnkPrev" style="text-decoration:none; color:white;" runat="server"><< Prev</asp:HyperLink>
		<asp:HyperLink id="lnkNext" style="text-decoration:none; color:white;" runat="server">Next >></asp:HyperLink>
	</td></tr>
	</table>
</form>
</body>
</html>

//Broskan

Medlem sedan aug. 2001261 inlägg
#3

Jadu, det var en mycket bra fråga. Det är ju helt sant att jag egentligen inte behöver ha den i repeatern. Men jag skulle endå vilja veta hur man kommer åt dessa kontroller för framtida bruk!

Någon som vet?

Medlem sedan okt. 20005 273 inlägg
#4

Kanske nått sånt här

[red]
<asp:Repeater id="Repeater1" runat="server" onitemdatabound='repBound'>
	<headertemplate>
		<asp:label runat='server' id='lblCurrentPage'/>
	</headertemplate>
		<itemtemplate>
			<table width="100%" border="0">
			<tr><td><%# DataBinder.Eval(Container.DataItem, "Product") %></td></tr>
			<tr><td> </td></tr>
			</table>
		</itemtemplate>
	</asp:repeater>
[/red]

och CB

[red]
		public void repBound(Object Sender, RepeaterItemEventArgs e)
		{
			switch(e.Item.ItemType)
			{
				case ListItemType.Item:
				case ListItemType.AlternatingItem:
					// Gör dina saker här om det är Item eller AlternatingItem
					break;
				case ListItemType.Header:
					Control _ctrl = e.Item.FindControl("lblCurrentPage");
					if(_ctrl != null)
					{
						Label CPage = (Label)_ctrl;
						CPage.Text = "Sida " + CurPage.ToString() + " av " + objPds.PageCount();
					}
					break;
			}
		}[/red]

Det är ju lite att leka m iaf ;)

Mvh icaaq

260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)