Привязка Listbox / CheckedListBox's SelectedValue с использованием ObjectDataSource, когда включен Multiselect - PullRequest
0 голосов
/ 27 сентября 2011

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

Сценарий.

У меня есть класс Customer, который содержит некоторые свойства

например.

class Customer
{
          int CustomerId{get;set;} //primary key
          int age{get;set;}
          string name{get;set;}
          Collection<BooksPurchased> booksCollection{get;set;}
} 

Я использовал функцию скажем GetCustomer (), которая возвращает Collection

public Collection<Customer> GetCustomer();

Эта функция связана с GridView с помощью элемента управления ObjectDataSource.

т.е.

<asp:GridView DataKey="CustomerId">
<columns>
<asp:TemplateField>
     <ItemTemplate><%# Eval('age') %></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
     <ItemTemplate><%# Eval('name') %></ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
     <ItemTemplate>
             <asp:Listbox DataSourceId="availableBooks" SelectedValue='<%# Bind("booksCollection") %>' />
             <asp:ObjectDataSource SelectMethod="GetBooksCollection" TypeName="Books">   
     </ItemTemplate>
</asp:TemplateField>
   </Columns>
</asp:GridView>

Эта сетка снова привязана к элементу управления ObjectDataSource, в котором в таблицах используется функция GetCustomer () для привязки к сетке.

Задача Я хочу, чтобы отобразить / обновить и все выбранные элементы, связанные в элемент управления Listbox. т.е. если список содержит 10 элементов, а коллекция книг содержит 3 элемента. Затем эти 3 элемента должны отображаться как выбранные. И когда пользователь выбирает чаги, они должны отражаться в самой коллекции.

1 Ответ

1 голос
/ 30 сентября 2011

Лично я держусь подальше от выполнения подобных операций в разметке ASP. Поэтому я не уверен, что вы можете связать свой полный список книг и выбрать книги для каждого клиента только в разметке - конечно, свойство SelectedValue не способ сделать это.

Вот как бы я сделал что-то вроде этого:

Markup:

<asp:GridView ID="customers" DataKey="CustomerId">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate><%# Eval('age') %></ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate><%# Eval('name') %></ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Listbox ID="books" DataSourceId="availableBooks" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Код-за:

protected override OnInit(EventArgs e)
{
    base.OnInit(e);

    customers.RowDataBound += new GridViewRowEventHandler(customers_RowDataBound);
}

void customers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Customer currentCustomer = (Customer) e.Row.DataItem;
        Listbox books = (ListBox) e.Row.FindControl("books");

        books.DataSource = GetBooksCollection();
        books.DataBind();

        foreach (BooksPurchased currentBook in currentCustomer.booksCollection)
        {
            if (books.Contains(currentBook))
            {
                books.Selected = true;
            }
        }
    }
}

Этот код не симпатичен, и ему необходимо заполнить некоторые детали (например, структуру объекта BooksPurchased), но он должен помочь вам правильно выбрать книги, выбранные каждым клиентом.

Немного сложнее управлять добавлением и удалением книг, когда пользователь выбирает различные элементы в ListBox, и каждый параметр зависит от деталей реализации (например, как вы храните клиента, если вообще его выполняете? база данных, или кеширование меняется, пока пользователь не нажмет кнопку отправки?). Если вы можете предоставить более подробную информацию об этой части, я мог бы помочь и с ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...