Как читать данные ListView в общий список - PullRequest
1 голос
/ 17 августа 2010

У меня есть ListView, который заполнен общим списком типа MyClass. Я могу легко связать данные из этого списка в ListView. Но у меня проблемы с чтением данных в обратном направлении. Это мой класс:

public class MyClass
{
    public int id { get; set; }
    public string name { get; set; }
}

У меня также есть общий список типа MyClass:

List<MyTest> list = new List<MyTest>();

Наконец, я связываю данные с ListView следующим образом:

ListView1.DataSource = list;
ListView1.DataBind();

Мой шаблон ListView:

  <asp:ListView runat="server" ID="ListView1">
  <LayoutTemplate>
    <table runat="server" id="table1" >
      <tr runat="server" id="itemPlaceholder" ></tr>
    </table>
  </LayoutTemplate>
  <ItemTemplate>
    <tr id="tr" runat="server">
        <td id="td1" runat="server">
            <asp:TextBox ID="tb1" runat="server" Text='<%#Eval("id") %>' />
        </td>
        <td id="td2" runat="server">
            <asp:TextBox ID="tb2" runat="server" Text='<%#Eval("name") %>' />
        </td>
    </tr>
  </ItemTemplate>

Как мне прочитать данные из ListView в мой список List?

Операция чтения данных ListView в общий список List должна начинаться после нажатия кнопки «GetData»

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Я не могу проверить это, но я верю, что это будет работать:

using System.Linq;

List<MyClass> list = ListView1.DataSource.Cast<MyClass>().ToList();

ОБНОВЛЕНИЕ: Как отмечено в комментариях, это работает только после установки DataSource.Если вы хотите получить список на постбэк, попробуйте:

List<MyClass> list = ListView1.Items
                              .Select(lvi=>lvi.DataItem as MyClass)
                              .ToList();
0 голосов
/ 18 августа 2010

Вы можете получить доступ к ListViewItem в событии обновления, подобном следующему:

<asp:ListView ID="ListView1" runat="server" OnItemUpdating="ListView1_ItemUpdating"></asp:ListView>

void ListView1_ItemUpdating(Object sender, ListViewUpdateEventArgs e)
{
     ListViewItem item = ListView1.Items[e.ItemIndex];

     // I think you should also be able to do if you are indeed binding with the type List<MyTest>
     List<MyTest> item = (List<MyTest>)ListView1.Items[e.ItemIndex];
}

Я могу показать вам другие способы, если вы опишете более подробно о сценарии, который вам необходим для получения данных.

...