2009-07-07 1 views
1

Что я ищу, это способ имитировать непрерывную форму стиля MS-Access в asp.net. В одном конкретном случае я хочу элемент управления, связанный с источником данных, который возвращает раскрывающийся список для каждой строки, привязанный к значению в источнике данных. Любое изменение в любом из dropdownlists 'будет немедленно обновлять базу данных.ASP.NET список dropdownlists - аналогично Access непрерывной форме

У меня есть на полпути к достижению этого, используя ретранслятор, с DropDownList.SelectedValue, назначенным в событии Repeater.ItemDataBound.

Но теперь, предположим, я добавить OnSelectedIndexChanged событие в DropDownList - как бы я тогда запрос ретранслятор знать, какие строки я был (чтобы получить значение первичного ключа, например)

Я не уверен, что это можно сделать легко .. поэтому вопрос в том, что я должен делать на самом деле? Я не хочу использовать GridView, который требует от меня выбора строки для редактирования. Я просто хочу, чтобы выпадающие списки автозапуска для любых обновлений.

Надеюсь, что это понятно ?!

Cheers! : D

ответ

0

Ради примеров, позволяет сказать, что мы являемся обязательными для пользовательского класса под названием Record

public class Record 
{ 
    public int Id; 
    public string Value; 
} 

Если поставить собственную логику на событиях Repeater.OnItemCreated вы можете прикрепить первичный ключ к идентификатору выпадающий список

protected void Repeater_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    if (!(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)) 
     return; 

    var dataItem = e.Item.DataItem as Record; 
    if (dataItem == null) return; 

    var dropdown = e.Item.FindControl("myDropDown") as DropDownList; 
    if (dropdown == null) return; 

    dropdown.ID = dropdown.ID + dataItem.Id; 
} 

Тогда на SelectedIndexChange, вы можете вытащить идентификатор прочь выпадающего списка, который уволил событие.

protected void SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var dropdown = sender as DropDownList; 
    if (dropdown == null) return; 

    var stringId = dropdown.ID.Replace("myDropDown", ""); 
    int id; 
    if (Int32.TryParse(stringId, out id)) 
    { 
     updateRecord(id, dropdown.SelectedValue); 
    } 
} 

Это очень уродливый взлом, но он должен позволять вам делать то, что вы хотите.

+0

Спасибо NerdFury - Похоже, что это может быть лучшим вариантом для меня на данный момент, хотя мне придется обойти некоторые проблемы с привязкой данных. –

+0

В дополнение к этому, я не смог найти способ получить идентификатор от источник данных ретранслятора до события itemdatabound, и там (а не с помощью itemcreated) я не мог изменить идентификатор dropdownlists! Таким образом, переход по маршруту Уайетта теперь настраивается пользователем ... –

+0

Нет причин, по которым вы не сможете изменить идентификатор вашего раскрывающегося списка в обработчике событий ItemDataBound. Что вы видите, что заставляет вас поверить в это? – NerdFury

0

Самый простой способ справиться с этим - это имитировать стиль ASP.NET с непрерывной формой. Который должен был сделать UserControl для обработки пользовательского интерфейса на уровне строк, а затем поместить указанный UserControl в ретранслятор.