---
title: "Generisk metod för att binda ListItems"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/176246-generisk-metod-för-att-binda-listitems"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "doggelito"
published: "2009-01-08T11:16:21.000Z"
updated: "2009-01-08T13:24:49.000Z"
replies: 1
views: 333
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/176246-generisk-metod-för-att-binda-listitems"
---

# Generisk metod för att binda ListItems

## #1 — doggelito, 2009-01-08T11:16Z

Hello, 
jag stöter rätt ofta på att man vill visa flera kolumner i t.ex. en dropdownlist och då blir man tvungen till att loopa igenom sin samling och adda varje item mot listen istället för att binda den. 
Tänkte att jag skulle fixa en generisk hjälpmetod för detta.
Metoden måste då kunna ta emot olika samlingar och visa x-antal kolumner till att börja med. Jag körde dock fast direkt! :( 
Jag vet ungefär vad jag vill ha men har inte en susning om vad jag behöver göra! Har denna exempelkod:

```
BusinessRegisterStatusService statusService = new BusinessRegisterStatusService();
IEnumerable<BusinessRegisterStatus> statuses = statusService.GetStatuses(UserInfo.CurrentSite);
dropDownListStatus.Items.AddRange(GetListItemCollection(typeof(BusinessRegisterStatus), 
     statuses, "{0} - {1}", "Code,Name", "{0}", "ID"));
dropDownListStatus.DataBind();
```

 

```
public ListItem[] GetListItemCollection(Type objectType, object collection, 
     string textFormat, string textColumns, string valueFormat, string valueColumns)
{
      //Response.Write(collection.GetType().ToString());
      //List<typeObject.> items = new List<ListItem>();
            
      return items.ToArray();
}
```

Resultatet av en listitem ska då bli:

```
<option value="1234">ABC - Namnet</option> //där 1234 är ID och ABC är Code och Namnet är Name
```

Är jag helt galet ute?  :OO 
Om inte, hur loopar jag igenom min samling och plockar ut rätt properties?

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

## #2 — doggelito, 2009-01-08T13:24Z

Inte vet jag hur men jag lyckades på nått sätt få ihop det! :)

```
BusinessRegisterStatusService statusService = new BusinessRegisterStatusService();
            IEnumerable<BusinessRegisterStatus> statuses = statusService.GetStatuses(UserInfo.CurrentSite);
            dropDownListStatus.Items.AddRange(GetListItemCollection(statuses, "{0} - {1}", "Code,Name", "{0}", "ID"));
            //dropDownListStatus.DataBind();
```

```
public ListItem[] GetListItemCollection<T>(IEnumerable<T> collection, 
string textFormat, string textColumn, string valueFormat, string valueColumn)
        {
            PropertyInfo[] pi = typeof(T).GetProperties();
            string[] textColumns = textColumn.Split(',');
            string[] valueColumns = valueColumn.Split(',');
            List<ListItem> listItems = new List<ListItem>();
            ListItem listItem;

            foreach (var item in collection)
            {
                listItem = new ListItem();
                listItem.Text = string.Format(textFormat, GetValueFromProperty(pi, item, textColumns));
                listItem.Value = string.Format(valueFormat, GetValueFromProperty(pi, item, valueColumns));
                listItems.Add(listItem);
            }

            return listItems.ToArray();
        }

        private object[] GetValueFromProperty<T>(PropertyInfo[] pi, T obj, string[] props)
        {
            List<object> items = new List<object>();
            foreach (var p in pi)
            {
                foreach (string s in props)
                {
                    if (p.Name == s)
                        items.Add(p.GetValue(obj, null));
                }
            }

            return items.ToArray();
        }
```

Det vore dock roligt att få lite kommentarer på koden, om den går att förfina! :)

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/176246-generisk-metod-för-att-binda-listitems
