---
title: "sätta värde"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/75685-sätta-värde"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "DavidB"
published: "2003-05-02T13:49:47.000Z"
updated: "2003-05-05T08:18:06.000Z"
replies: 7
views: 374
page: 1
pages: 1
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/75685-sätta-värde"
---

# sätta värde

## #1 — DavidB, 2003-05-02T13:49Z

Hej!

Jag har följande kod:

```
<asp:TemplateColumn>
<HeaderTemplate><asp:LinkButton id="[b]TitleText[/b]" CommandName="sort" class="siteheadline" runat="server" /></HeaderTemplate>
<ItemTemplate><asp:HyperLink NavigateUrl='/index.aspx?id=<%# DataBinder.Eval(Container, "DataItem.UserId") %>' Text='<%# DataBinder.Eval(Container, "DataItem.Title") %>' class="sitetext" runat="server" /></ItemTemplate>
</asp:TemplateColumn>
```

Nu är det så att jag har två problem.

1\. Varför går det inte att sätta **TitleText.Text** från min CodeBehind?
Får följande fel:

> System.NullReferenceException: Object reference not set to an instance of an object.

Det fungerar med alla andra Kontroller som inte ligger i en DataGrid. Nån som vet?

2\. Om jag har följande kod:

```
NavigateUrl='/index.aspx?id=<%# + DataBinder.Eval(Container, "DataItem.UserId") %>'
```

så blir Url:en som man kommer till om man klickar:
localhost/index.aspx?id=\<%# + DataBinder.Eval(Container, "DataItem.UserId") %\>
Dock om jag har följande kod:

```
NavigateUrl='<%# + DataBinder.Eval(Container, "DataItem.UserId") %>'
```

Så blir Url:en:
localhost/ID
Men det jag vill är att man skall komma till:
localhost/index.aspx?ID
Nån som vet?

Sen e det en tredje grej och det är hur sätter man bakgrundsfärg på en TableCell från en codebehind?

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

## #2 — NETwork, 2003-05-02T14:06Z

Kan svara på fråga 2 och 3 lite snabbt:

```
NavigateUrl='<%# "/index.aspx?id=" + DataBinder.Eval(Container, "DataItem.UserId") %>'

och

DataGrid1.Items[2].Cells[3].BackColor = Color.Blue;
```

På första frågan så måste du se till att du befinner dig i din headertemplate. Jag brukar använda ItemDataBound-eventet för att komma åt saker i mina datagrids. Lägg en koll där så du bara kör koden i headern. Nåt i den här stilen skulle jag tro:

```
public void myFunction(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
//Om vi är i headern:
  if (e.Item.ItemType == ListItemType.Header) {
// ...så kör du en findcontrol: 
    ((LinkButton)e.Item.FindControl("myLB")).Text = "lajban";
  }
}
```

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

## #3 — NETwork, 2003-05-02T14:09Z

Ojdå, på sista frågan menade du kanske det här?

```
TableCell tc = new TableCell();
tc.BackColor = Color.Blue;
```

 :)

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

## #4 — DavidB, 2003-05-02T14:58Z

```
public void myFunction(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
//Om vi är i headern:
  if (e.Item.ItemType == ListItemType.Header) {
// ...så kör du en findcontrol: 
    ((LinkButton)e.Item.FindControl("myLB")).Text = "lajban";
  }
}
```

Fattar inte så mycket av koden ova. Hur göra man om man vill ha in den i PageLoaden och inte ha den som en egen funktion?

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

## #5 — NETwork, 2003-05-03T10:08Z

Varför ska du ha den i pageloaden? En bra regel är att ha så lite kod som möjligt där. 

Använder du vs.net? Gå i så fall till dina events för din datagrid, där har du något som heter DataGridItemEvent. Det är denna du ska använda... det är helt enkelt ett event som körs för varje rad när din datagrid byggs upp, något du kan utnyttja om du ska göra förändringar i den från koden...

Har du inte vs.net skriver du bara onItemDataBound="myFunction" i din datagrid.

Vill du ändå göra detta i pageloaden måste du hitta kontrollen i din header. Din headertemplate är en kontroll (inte ett item) precis som din linkbutton, tror jag. Eftersom headern då är den första kontrollen i din datagrid så borde du hitta den här:

```
myDG.Controls[0]
```

Denna innehåller sedan i sin tur ett antal kontroller, då får du antingen göra en findcontrol eller leta upp den manuellt. Om din linkbutton är den första kontrollen så borde du hitta den så här:

```
((LinkButton)myDG.Controls[0].Controls[0]).Text = "foo";
```

Men det är ju inte alls säkert att det är din första kontroll så du får prova lite... skriv ut och se vad du hittar eller gör en trace. Men enklast är nog en findcontrol som sagt.

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

## #6 — DavidB, 2003-05-03T10:22Z

använder inte VS.Net

Det var nog "onItemDataBound="myFunction"" som jag sökte, men jag får det inte att fungera nu ändå.

Koden ser ut såhär:

```
public void SetTitle(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
	if (e.Item.ItemType == ListItemType.Header) {
		((LinkButton)e.Item.FindControl("TitleText")).Text = "Titel:";
	}
}
```

och min headertemplate:

```
<HeaderTemplate>
<asp:LinkButton id="TitleText" CommandName="sort" class="siteheadline" runat="server" />
</HeaderTemplate>
```

E det nånting jag har missat?

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

## #7 — NETwork, 2003-05-05T06:24Z

Får du något felmeddelande?

<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolsdatagridclassonitemdataboundtopic.asp>

Obs! Av någon anledning så vill inte länken ovan fungera när jhag lägger in den här på webbforum, men om du tar boprt % 20 och \< br% 20/\> i url:en så kommer du rätt...

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

## #8 — DavidB, 2003-05-05T08:18Z

fick det att fungera, var bara jag som har gjort en liten tabbe :)

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/75685-sätta-värde
