---
title: "Ny på ASP.net söker svar på..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/181566-ny-på-asp-net-söker-svar-på"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Sunix"
published: "2009-12-08T10:30:22.000Z"
updated: "2009-12-11T19:59:16.000Z"
replies: 27
views: 2036
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/181566-ny-på-asp-net-söker-svar-på"
---

# Ny på ASP.net söker svar på...

_Sida 1 av 2._

## #1 — Sunix, 2009-12-08T10:30Z

Hej, i "gamla" ASP kunde man använda sig av scriptlets typ. \<% rs("ssd") %\>
Men i .net verkar man endast använda sig av olika kontroller typ Datagrid m.fl.

I asp hade man total kontroll på layout i.o.m. man kunde verkligen specificera var fälten/i vilken cell datat från DB skulle skrivas ut men i .net verkar man vara utelämnad till att justera och designa dessa kontroller!

Har jag fel och i så fall hur gör man bäst för att kontrollera layouten? :)

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

## #2 — StefanBergfeldt, 2009-12-08T10:31Z

Bäst gör du genom att antingen hålla dig till Repeaters för dataloopar och literals för annat, eller genom att använda dig av ASP.NET MVC Framework

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

## #3 — Sunix, 2009-12-08T10:37Z

Har du något exempel på repeater? Jag antar att literals bara kan ta en post från databasen?!

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

## #4 — StefanBergfeldt, 2009-12-08T11:06Z

Här ser du ett exempel på hur jag brukar göra
<http://blog.crswebb.se/post/2008/09/26/Att-anvanda-egna-Collections.aspx>

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

## #5 — Sunix, 2009-12-08T12:19Z

Men om jag nu skulle vilja ta fram ett värde på en funktion/metod mitt i repeatern?! Hur gör jag då??

```
 <asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate><table border="1"></HeaderTemplate>
    <ItemTemplate>
    <tr>
        <td>
            <%#DataBinder.Eval(Container.DataItem, "BilID") %>
        </td>
        <td>
            
            <%#DataBinder.Eval(Container.DataItem, "Bilnamn") %>
        </td>
        <td>[B][Här vill jag ta fram ett värde från metoden retInt()][/B]</td>
    </tr>
    </ItemTemplate>
    <FooterTemplate></table></FooterTemplate>
    
    </asp:Repeater>
```

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

## #6 — StefanBergfeldt, 2009-12-08T12:40Z

Jag skulle (nog) ha lagt en Literal där, och i eventet ItemDataBound för Repeatern hämtat datat, letat på Repeatern och lagt dit infon

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

## #7 — Sunix, 2009-12-08T12:57Z

Jag försökte lägga dit en literal men det verkar inte gå att lägga in en mitt i ett annan kontroll?!

```
<asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate><table border="1"></HeaderTemplate>
    <ItemTemplate>
    <tr>
        <td>
            <%#DataBinder.Eval(Container.DataItem, "BilID") %>
        </td>
        <td>
            
            <%#DataBinder.Eval(Container.DataItem, "Bilnamn") %>
        </td>
        <td>[B]<asp:Literal ID="Literal2" runat="server"></asp:Literal>[/B]</td>
    </tr>
    </ItemTemplate>
    <FooterTemplate></table></FooterTemplate>
    
    </asp:Repeater>
```

Error	1	The name 'Literal2' does not exist in the current context	C:\\C#\\Testapplikation\\Testapplikation\\Default.aspx.cs	21	13	Testapplikation

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

## #8 — StefanBergfeldt, 2009-12-08T13:24Z

Nej, jag skrev fel. "letat på repeatern" menade jag "letat på litaral"
((Literal)e.Item.FindControl("Literal2")).Text = "text";

Det borde fungera om din RepeaterEventArgs i ItemDataBound heter e

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

## #9 — Sunix, 2009-12-08T13:43Z

Nej, jag vet inte riktigt hur du menar men detta verkar väldigt komplicerat, bara för att ta fram data från 2 olika källor inom samma kontroll!

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

## #10 — StefanBergfeldt, 2009-12-08T13:54Z

Nejdå, det är inte alls komplicerat när man väl har förstått hur det hänger ihop.
Kan du visa lite kod, hur du har försökt lösa det?

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

## #11 — Sunix, 2009-12-08T14:09Z

**Detta är Default.aspx.cs**

```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Odbc;
using System.Data;

namespace Testapplikation
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            Classe cl = new Classe();
            Repeater1.DataSource = cl.valjAlltFranBilar();
            Repeater1.DataBind();

            //Literal2.Text = cl.retInten(45, 21, 87).ToString();
        }
    }
}
```

**Detta är en fil som jag döpte till Classe bara för att testa om det gick att skapa egna klassobjekt till att göra nya instanser av, typ!**

```
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Odbc;
using System.Data;

namespace Testapplikation
{
    public class Classe
    {
        public OdbcDataReader valjAlltFranBilar()
        {
            
            OdbcConnection myConnection = new OdbcConnection("Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\Testdatabas.mdb");
            OdbcCommand myCommand = new OdbcCommand("Select * from Bilar", myConnection);

            myConnection.Open();

            return myCommand.ExecuteReader(CommandBehavior.CloseConnection);
            
            myConnection.Close();
            
        }

        public int retInten(int a, int k, int b)
        {
            b = a * k;
            return b;
        }
    }
}
```

**Detta är Default.aspx**

```
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Testapplikation._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Tomas test med databaser</title>
    <style type="text/css">
        .style1
        {
            height: 204px;
        }
    </style>
</head>
<body>
    <asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate><table border="1"></HeaderTemplate>
    <ItemTemplate>
    <tr>
        <td>
            <%#DataBinder.Eval(Container.DataItem, "BilID") %>
        </td>
        <td>
            
            <%#DataBinder.Eval(Container.DataItem, "Bilnamn") %>
        </td>
        <td>
            <asp:Literal ID="Literal2" runat="server"></asp:Literal></td>
    </tr>
    </ItemTemplate>
    <FooterTemplate></table></FooterTemplate>
    
    </asp:Repeater>
    <asp:Literal ID="Literal1" runat="server"></asp:Literal>
</body>

    
</html>
```

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

## #12 — StefanBergfeldt, 2009-12-08T14:14Z

Japp, du måste skapa ett Repeater_ItemDataBound-event till din repeater, i den ska du lägga följande kod:

if (e.Item.ItemType==ItemType.AlternatingItem \|\| e.Item.ItemType==ItemType.Item)
{
  ((Literal)e.Item.FindControl("Literal2")).Text = "text";
}

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

## #13 — hopparn, 2009-12-08T15:03Z

Hallå
Jag skulle, som en parantes, rekommendera dig att titta på Listviewkontrollen istället för repeater om du använder 3.5 ramverket :) den är väldigt dynamisk men mycket kraftfullare än repeatern. Det är enklare att manipulera data i en listview. Här kan du läsa lite om den: <http://www.singingeels.com/Articles/The_ListView_Dominates_The_Repeater.aspx>

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

## #14 — Sunix, 2009-12-08T20:06Z

Hej igen! Det verkar väldigt komplicerat att få fullständig kontroll på datat utan en massa extra. Kan jag själv kontrollera var datat hamnar ifall jag använder listview?

Jag fick inte riktigt ihop artikeln!

EDIT:

Nu fattar jag kanske, ska testa i morgon!

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

## #15 — StefanBergfeldt, 2009-12-09T06:37Z

Hopparn, på vilket sätt menar du att ListView skulle ge bättre kontroll över den renderade html-koden än en Repeater?

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

## #16 — hopparn, 2009-12-09T07:37Z

> **[StefanBergfeldt skrev:](https://www.webforum.nu/p/1490905)**
>
> ... skulle ge bättre kontroll över den renderade html-koden än en Repeater?

Det menade jag inte :)
Jag menade att du har lättare att manipulera data i en listview med t ex datakeys och edititemtemplates och events som finns tillgängliga. Att behålla positioner vid postbacks etc, samtidigt som du har 100% kontroll över din rendering. Alltså som en repeater med gridviewkunskaper(och mer därtill)
Som ett litet exempel med nästlade listviews med edit och insert för att du ska förstå vad jag menar, jag har tagit bort en del kod och bytt lite namn för att inte visa, så det fungerar inte rakt av men konceptuellt:

```
    <asp:ListView runat="server" 
			DataKeyNames="CategoryId" 
			ID="lvCategories" 
			OnItemDataBound="ItemBound"
			OnItemEditing="EditItem"
			OnItemCanceling="CancelEditing"
			OnItemInserting="InsertItem"
			OnItemUpdating="UpdateItem"
			OnItemDeleting="DeleteItem"
			InsertItemPosition="None">
			<LayoutTemplate>
				<table id="Itemcategories" runat="server" class="grid">
					<tr class="row">
						<th class="first">Category</th>
						<th>Active</th>
						<th>&nbsp;</th>
					</tr>
					<tr class="row" id="itemPlaceholder" runat="server" />
				</table>
			</LayoutTemplate>
			
			<ItemTemplate>
				<tr id="row" runat="server">
					<td class="first"><%# Eval("Name")%></td>
					<td><%# Page.ReturnYesNo((bool)Eval("Active"))%></td>
					<td>
						<asp:ImageButton ID="EditButton" runat="server" CommandName="Edit" ImageUrl="~/Images/Icons/edit.gif" Visible="true" AlternateText="Edit" ToolTip="Edit" /> 
						<asp:ImageButton ID="DeleteButton" runat="server" CommandName="Delete" ImageUrl="~/Images/Icons/del.gif" OnClientClick="return confirm('Do you really want to delete this item?');" Visible="true" AlternateText="Delete" ToolTip="Delete" />
					</td>
				</tr>					
			</ItemTemplate>

			<EditItemTemplate>
				<tr id="row" runat="server">
					<td class="first"><asp:TextBox ID="tbName" runat="server" Text='<%# Eval("Name")%>' /></td>
					<td><asp:CheckBox ID="cbActive" runat="server" Checked='<%#Eval("Active") %>' /></td>
					<td>
						<asp:Button ID="UpdateButton" runat="server" CssClass="genericButton" CommandName="Update" Text="Update" /> 
						<asp:Button ID="CancelButton" runat="server" CssClass="genericButton" CommandName="Cancel" Text="Cancel" />
					</td>
				</tr>
				<!-- Items -->

				<tr runat="server" id="ItemsRow">
					<td colspan="3" class="subgridcol first" style="padding: 10px 0 0 20px;border-top:none">
						<h2>Items in category</h2>
						<asp:LinkButton runat="server" ID="lbAddItem" Text="Add new item" OnClick="lbAddItem_Click"></asp:LinkButton>
					</td>
				</tr>
				<asp:ListView runat="server" 
					DataKeyNames="ItemId" 
					ID="lvItems" 
					OnItemEditing="ItemEdit"
					OnItemCanceling="CancelEditing"
					OnItemInserting="ItemInsert"
					OnItemUpdating="ItemUpdate"
					InsertItemPosition="None"
					OnItemDeleting="ItemDelete"
					 OnItemDataBound="ItemDataBound">
					<LayoutTemplate>
						<tr id="Tr1" runat="server" class="subgridrow">
							<td colspan="3" class="subgridcol first">
								<table class="grid">
									<tr>
										<th class="first">Name</th>
										<th>Type</th>
										<th>Pricetype</th>
										<th>Amount (inc VAT)</th>
										<th>VAT</th>
										<th>&nbsp;</th>
									</tr>
									<tr class="row" id="itemPlaceholder" runat="server" />
								</table>
							</td>
						</tr>		
					</LayoutTemplate>
						
					<ItemTemplate>
						<tr id="row" runat="server">
							<td class="first"><%# Eval("Name")%></td>
							<td><%#Eval("Type")%></td>
							<td><%#Eval("PriceType")%></td>
							<td><%# Eval("Amount")%> <%#Page.Currency %></td>
							<td runat="server" id="tdVat"><%# Eval("VAT")%> %</td>
							<td>
								<asp:ImageButton ID="EditButton" runat="server" CommandName="Edit" ImageUrl="~/Images/Icons/edit.gif" Visible="true" AlternateText="Edit" ToolTip="Edit" /> 
								<asp:ImageButton ID="DeleteButton" runat="server" CommandName="Delete" ImageUrl="~/Images/Icons/del.gif" OnClientClick="return confirm('Do you really want to delete this item?');" Visible="true" AlternateText="Delete" ToolTip="Delete" />
							</td>
						</tr>
					</ItemTemplate>
					
					<EditItemTemplate>
						<tr id="row" runat="server">
							<td class="first"><asp:TextBox ID="tbItemName" runat="server" Text='<%# Eval("Name")%>' /></td>
							<td><asp:DropDownList ID="ddType" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddType_SelectedIndexChanged" /></td>
							<td><asp:DropDownList ID="ddPriceType" runat="server" /></td>
							<td><asp:TextBox ID="tbItemAmount" runat="server" Text='<%# Eval("Amount")%>' /> <%#Page.Currency %></td>
							<td><asp:TextBox ID="tbItemVAT" runat="server" Text='<%# Eval("VAT")%>' /><asp:Literal runat="server" ID="litPerc" Text="%"></asp:Literal></td>
							<td>
								<asp:Button ID="UpdateButton" runat="server" CssClass="genericButton" CommandName="Update" Text="Update" /> 
								<asp:Button ID="CancelButton" runat="server" CssClass="genericButton" CommandName="Cancel" Text="Cancel" />
							</td>
						</tr>
					</EditItemTemplate>
					
					<InsertItemTemplate>
						<tr id="row" runat="server">
							<td class="first"><asp:TextBox ID="tbItemName" runat="server" /></td>
							<td><asp:DropDownList ID="ddType" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddType_SelectedIndexChanged" /></td>
							<td><asp:DropDownList ID="ddPriceType" runat="server" /></td>
							<td><asp:TextBox ID="tbItemAmount" runat="server" /> <%#Page.Currency %></td>
							<td><asp:TextBox ID="tbItemVAT" runat="server" /><asp:Literal runat="server" ID="litPerc" Text="%"></asp:Literal></td>
							<td>
								<asp:Button ID="InsertButton" runat="server" CssClass="genericButton" CommandName="Insert" Text="Add item" /> 
								<asp:Button ID="CancelButton" runat="server" CssClass="genericButton" CommandName="Cancel" Text="Cancel" />
							</td>
						</tr>
					</InsertItemTemplate>
				</asp:ListView>
			</EditItemTemplate>
			
			<InsertItemTemplate>
				<tr id="row" runat="server">
					<td class="first"><asp:TextBox ID="tbName" runat="server" /></td>
					<td><asp:CheckBox ID="cbActive" runat="server" /></td>
					<td>
						<asp:Button ID="InsertButton" runat="server" CssClass="genericButton" CommandName="Insert" Text="Add" /> 
						<asp:Button ID="CancelButton" runat="server" CssClass="genericButton" CommandName="Cancel" Text="Cancel" />
					</td>
				</tr>					
			</InsertItemTemplate>
		</asp:ListView>
```

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

## #17 — Sunix, 2009-12-09T11:51Z

Och om mitt visual studio inte fattar vad Item eller ItemType är för något vad har jag gjort för fel då?

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

## #18 — StefanBergfeldt, 2009-12-09T12:00Z

ListItemType.Item

Eventuellt måste du lägga till using System.Data; överst i din fil

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

## #19 — Sunix, 2009-12-09T12:06Z

Error	2	The name 'ItemType' does not exist in the current context
Jag har using System.Data; längst upp nu.

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

## #20 — Sunix, 2009-12-09T12:08Z

Error	1	'System.EventArgs' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'System.EventArgs' could be found (are you missing a using directive or an assembly reference?)	C:\\C#\\Testapplikation\\Testapplikation\\Default.aspx.cs	23	19	Testapplikation

Error	3	'System.EventArgs' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'System.EventArgs' could be found (are you missing a using directive or an assembly reference?)	C:\\C#\\Testapplikation\\Testapplikation\\Default.aspx.cs	23	66	Testapplikation

Error	5	'System.EventArgs' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'System.EventArgs' could be found (are you missing a using directive or an assembly reference?)	C:\\C#\\Testapplikation\\Testapplikation\\Default.aspx.cs	25	29	Testapplikation

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/181566-ny-på-asp-net-söker-svar-på  
Nästa sida: https://www.webforum.nu/amne/dotnet/181566-ny-på-asp-net-söker-svar-på/page2.md
