---
title: "Hur modifierar jag doUpdate-metoden så att den fungerar till min datagrid?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/78932-hur-modifierar-jag-doupdate-metoden-så-att-den-fungerar-till-min-datagrid"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "smyken"
published: "2003-06-05T08:30:53.000Z"
updated: "2003-06-05T10:27:12.000Z"
replies: 5
views: 436
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/78932-hur-modifierar-jag-doupdate-metoden-så-att-den-fungerar-till-min-datagrid"
---

# Hur modifierar jag doUpdate-metoden så att den fungerar till min datagrid?

## #1 — smyken, 2003-06-05T08:30Z

**Hej** 
Jag har "anpassat" min datagrid en smula så att den visar två fält samtidigt i samma *\<ItemTemplate\>* respektive *\<EditItemTemplate\>* rad.
Men jag får felmeddelande när jag klickar på "Edit"-knappen:
*"System.InvalidCastException: Specified cast is not valid."*

Jag vet dock inte hur jag ska lösa detta (förutom att ändra datagriden). Orsaken till varför jag vill ha det så här är det för att jag vill ha cellerna så här:

\______\_                    
rubrik
 text                  
\_____\_

istället för    
\_________\_
rubrik \| text 
\_________\_

Min doUpdatemetod:

```php
public void doUpdate(Object sender, DataGridCommandEventArgs e) {
    
    string Rubrik = ((TextBox)e.Item.Cells[0].Controls[0]).Text;
    string Text = ((TextBox)e.Item.Cells[0].Controls[0]).Text;
        
    mygrid.EditItemIndex = -1;
    DataSet ds = CreateDataSource();
    DataRow row = ds.Tables[0].Rows[e.Item.ItemIndex];
    
    row["rubrik"]=Rubrik;
    row["huvudtext"]=Text;
    
    ds.WriteXml(Server.MapPath("../../db/aktuellt.xml"));
    mygrid.DataSource = CreateDataSource();
    mygrid.DataBind();
    }
```

Min datagrid:

```php
<form runat="server">
     <asp:datagrid id="mygrid" runat="server" AutoGenerateColumns="false"
            OnUpdateCommand="doUpdate" 
            --- 
            ---  >
              <Columns>
                <asp:TemplateColumn>

                   <ItemTemplate>
                      <asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "rubrik") %>' runat="server" />
                            <br /><br />
                           <asp:Label Text='<%# ((string)DataBinder.Eval(Container.DataItem, "huvudtext")).Replace("\n", "<br/>") %>' runat="server" />
                   </ItemTemplate>

                   <EditItemTemplate>
                          <asp:TextBox id="Rubrik" Rows="1" Text='<%# DataBinder.Eval(Container.DataItem, "rubrik")%>' textMode="SingleLine" Columns="35" runat="server" />
                            <br /><br />
                          <asp:TextBox id="Huvudtext" Rows="15" Text='<%# DataBinder.Eval(Container.DataItem, "huvudtext")%>' textMode="multiLine" Columns="35" runat="server" />
                    </EditItemTemplate>

                </asp:TemplateColumn>

                <asp:EditCommandColumn CancelText="Ångra" EditText="Ändra" UpdateText="Uppdatera" ButtonType="PushButton" />
             </Columns>
      </asp:datagrid>
```

Kanske finns det nån annan metod för att uppnå detta?

// Smyken

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

## #2 — Dino, 2003-06-05T08:51Z

Om du använder findcontrol då.

```
string Rubrik = ((TextBox)e.Item.findcontrol("Rubrik")).Text;
string Text = ((TextBox)e.Item.findcontrol("Huvudtext")).Text;
```

Välkommen till webForum. :)

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

## #3 — smyken, 2003-06-05T09:36Z

Tack för tipset...
Nu fick jag dock ett annat felmeddelande:
*'System.Web.UI.WebControls.DataGridItem' does not contain a definition for 'findcontrol'* 

Jag prövade att lägga  till följande namnområde (trodde det hade nått med det att göra) men ingen hände:
*\<%@ import Namespace="System.Web.UI.WebControls" %\>* 

Sen vart jag förstås nyfiken, vad är det för skillnad på de två sätten?

// Smyken

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

## #4 — NETwork, 2003-06-05T10:20Z

FindControl... case sensitive. :)

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

## #5 — smyken, 2003-06-05T10:25Z

Ahhh.......
Jag lyfter på hatten. WebForum är chef......
/ Smyken

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

## #6 — NETwork, 2003-06-05T10:27Z

> Sen vart jag förstås nyfiken, vad är det för skillnad på de två sätten?

När du använder ((TextBox)e.Item.Cells\[0\].Controls\[0\]).Text så anger du själv "vägen" till kontrollen... vilken cell den ligger i och vilken kontroll du vill ta fram. Problemet är att controls\[0\] inte alls är din textbox utan den ligger gissningsvis på index nummer 1. Första indexet är alltid en literal har jag för mig (denna används för eventuella styles). Med en findcontrol så letar den själv upp den eftersökta controllen, du slipper således göra det själv (med en liten omärkbar prestandaförlust som följd). Ska du själv plocka ut kontrollerna så är det lämpligt att du skriver ut kontrollen först så du vet vad det är för kontroll du har hittat:

```
Response.Write(e.Item.Cells[0].Controls[0]);
```

Är det en textbox så skriver den ut det och när du vet att du är rätt så kan du typkonvertera den och skriva ut dess text. Är det inte en textbox och du ändå typkonverterar den så blir det som sagt fel... Man får gräva lite helt enkelt, när man är varm i kläderna lär man sig ungefär var kontrollerna ligger (det går ju att räkna). Men findcontrol är smidigt. :)

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/78932-hur-modifierar-jag-doupdate-metoden-så-att-den-fungerar-till-min-datagrid
