---
title: "ListView EditItem och Repository Pattern"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/184587-listview-edititem-och-repository-pattern"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "StefanBergfeldt"
published: "2010-09-10T12:58:14.000Z"
updated: "2010-09-10T15:17:00.000Z"
replies: 9
views: 550
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/184587-listview-edititem-och-repository-pattern"
---

# ListView EditItem och Repository Pattern

## #1 — StefanBergfeldt, 2010-09-10T12:58Z

Jag har blivit påtvingad att lära mig använda Repository Pattern, och det verkar ju smidigt på sitt sätt, även om jag är ovan än så länge.

Nu har jag dock kört fast i kombinationen Repository Pattern, ListView när jag försöker uppdatera information. Att hämta och lägga till nytt är inga problem (även om jag fick ge upp ItemInsert och lägga det formuläret bredvid)

Jag har beskrivit problemet, och i viss mån fått hjälp här: <http://www.aspsidan.se/default.asp?page=forum&fp=showPost&fId=52&pId=600756>

Just nu är det stora problemet att jag inte lyckas hämta den DataItem jag har redigerat, något jag försöker göra så här:

```
Sizeandprice editItem = (Sizeandprice)listProducts.Items[e.ItemIndex].DataItem;
```

Hela mitt försök ser ut så här:

```
        protected void listProducts_ItemUpdating(object sender, ListViewUpdateEventArgs e)
        {
            IRepository<Sizeandprice> _sizeandprice = new EntityRepository<Sizeandprice>();
            Sizeandprice editItem = (Sizeandprice)listProducts.Items[e.ItemIndex].DataItem;
            Sizeandprice sp = _sizeandprice.First(p => p.id == editItem.id);
            sp.name = editItem.name;
            sp.batch = editItem.batch;
            sp.pixels = editItem.pixels;
            sp.price = editItem.price;
            sp.surface = editItem.surface;
            _sizeandprice.Save();
            listProducts.EditIndex = -1;
            FillList();
        }
```

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

## #2 — doggelito, 2010-09-10T13:10Z

Kommer inte ihåg hur ListViewn är uppbyggd nu men kan det inte vara så att den redan är bunden till datat innan ItemUpdating körs?
I så fall måste du hämta din SizeAndPrice på nytt inne i metoden.

Däremot i t.ex. eventet ItemDataBound så går det bra att hämta via e.DataItem.

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

## #3 — StefanBergfeldt, 2010-09-10T13:16Z

Jag hänger inte riktigt med på vad du menar...

Vad är det jag måste hämta på nytt i vilken metod?

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

## #4 — doggelito, 2010-09-10T13:23Z

Raden du anger: 

```
Sizeandprice editItem = (Sizeandprice)listProducts.Items[e.ItemIndex].DataItem;
```

Du kan inte hämta DataItem som en Sizeandprice för DataItem är null vid tillfället.
Du måste hämta ut värdena var för sig:

```
Sizeandprice sp = _sizeandprice.First(p => p.id == editItem.id);
sp.name = e.Item.FindControl("foo");
```

Men det är som sagt bara en gissning! :)

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

## #5 — StefanBergfeldt, 2010-09-10T13:26Z

Sure, vi säger så då. 

Men eftersom jag inte kan hämta DataItem så är editItem null, vilket gör att jag inte vet vilken post som ska redigeras. Om editItem är null så är editItem.id också null

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

## #6 — doggelito, 2010-09-10T13:31Z

Helt rätt!
Du måste hämta ut aktuellt editid från ListViewn. 
Jag är helt lost på vilka properties det finns att tillgå men du borde kunna ange Sizeandprice.id som datakey i ListViewn som du sedan hämtar upp i ItemUpdating, typ:

```
int id = (int)e.Item.nånting; 
eller
int id = (int)listProducts.Items[e.ItemIndex].nånting;
Sizeandprice sp = _sizeandprice.First(p => p.id == id);
```

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

## #7 — StefanBergfeldt, 2010-09-10T13:40Z

Jag hittar då inget som verkar användbart :(

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

## #8 — StefanBergfeldt, 2010-09-10T14:13Z

Verkar ju helt sjukt om det ska behöva lösas såhär, men det fungerar iallafall:

```
        protected void listProducts_ItemUpdating(object sender, ListViewUpdateEventArgs e)
        {
            IRepository<Sizeandprice> _sizeandprice = new EntityRepository<Sizeandprice>();
            ListViewItem editItem = listProducts.Items[e.ItemIndex];
            Sizeandprice sp = _sizeandprice.GetAll().OrderBy(p => p.name).ElementAt(e.ItemIndex);
            sp.name = ((TextBox)editItem.FindControl("tbName")).Text;
            //sp.batch = ((TextBox)editItem.FindControl("tbBatch")).Text;
            sp.pixels = int.Parse(((TextBox)editItem.FindControl("tbPixels")).Text);
            sp.price = int.Parse(((TextBox)editItem.FindControl("tbPrice")).Text);
            sp.surface = ((TextBox)editItem.FindControl("tbSurface")).Text;
            _sizeandprice.Save();
            listProducts.EditIndex = -1;
            FillList();
        }
```

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

## #9 — doggelito, 2010-09-10T15:15Z

Mm, det där ser farligt ut.
Jag skulle inte hämta via en OrderBy och ElementAt, du måste kunna få tillbaka det exakta id:t som motsvarar databasen.
Annars är det så där man normalt fyller en klass i ASP.NET Webforms. Vill du ha enklare och smidigare lösningar så är det ASP.NET MVC som gäller (och som jag kan rekommendera).

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

## #10 — doggelito, 2010-09-10T15:17Z

Kolla denna: :)
<http://forums.asp.net/t/1318756.aspx>

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/184587-listview-edititem-och-repository-pattern
