RadComboBox SelectedIndexChanged събитие не се задейства при използване на редактиране на място в RadGrid

Използвам редактиране на място в RadGrid, който е изграден с помощта на клас файл. Всичко работи добре, освен че имам проблем, че събитието SelectedIndexChanged не се задейства, когато мрежата е в режим на редактиране. някакви мисли?

private void RadGrid_ItemCreated(object sender, GridItemEventArgs e)
{
    if (e.Item is GridEditableItem && e.Item.IsInEditMode)
    {
        try
        {
            if ((e.Item as GridDataItem) == null) { return; }
            ((RadNumericTextBox) (e.Item as GridDataItem)["Percentage"].Controls[0]).Width = Unit.Pixel(75);
            ((TextBox) (e.Item as GridDataItem)["Code"].Controls[0]).Width = Unit.Pixel(75);

            RadComboBox _participantList = (e.Item as GridEditableItem)["ID"].Controls[0] as RadComboBox;
            if (null == _participantList) { return; }

            _participantList.Width = Unit.Pixel(120);
            _participantList.DataValueField = "ID";
            _participantList.DataTextField = "ID";
            _participantList.AutoPostBack = true;
            _participantList.DataSource = MAASBaseInterface.ParticipantAPI.GetParticipants();
            _participantList.DataBind();
            _participantList.SelectedIndexChanged += new RadComboBoxSelectedIndexChangedEventHandler(_participantList_SelectedIndexChanged);

            if (!(e.Item.DataItem is GridInsertionObject))
                _participantList.SelectedValue = ((Participant) (e.Item.DataItem)).ID.ToString();
            if (e.Item.DataItem is GridInsertionObject)
                _participantList.EmptyMessage = "-- Select --";
        }
        catch (Exception ex)
        {

            string _ex = ex.Message;
        }
    }
} 

void _participantList_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
    //first reference the edited grid item through the NamingContainer attribute
    GridEditableItem editedItem = (sender as RadComboBox).NamingContainer as GridEditableItem;
    int _selectedValue = Convert.ToInt32((editedItem["ID"].Controls[0] as RadComboBox).SelectedValue);
    ParticipantList _participants = MAASBaseInterface.ParticipantAPI.GetParticipants();
    Participant _participant = _participants.Where(a => a.ID == _selectedValue) as Participant;
    RadTextBox _code = editedItem["Code"].Controls[0] as RadTextBox;
    _code.ReadOnly = false;
    _code.Text = _participant.Code;
}

person Tim    schedule 21.12.2011    source източник


Отговори (2)


Имате нужда от бутон, който има CommandName="Select" набор. Без това събитието не се задейства. Възможно ли е това да е проблемът?

Тази връзка дава повече подробности

РЕДАКТИРАНЕ:

Проблемът може да е, че падащият списък се добавя динамично към мрежата, така че събитието трябва да се добавя всеки път, когато редът е обвързан. Според моя опит radGrid и GridView работят по същия начин по отношение на модела на събитието, така че това SO отговор може да ви подреди. Успех - първоначалните ми мисли бяха, че това не може да бъде не, но може да има път напред

person Crab Bucket    schedule 21.12.2011
comment
Благодаря Тим, но не търся събитието selectedindexchanged на radgrid. Искам избраният индекс да бъде променен на radcombobox. Знам, че нямам нужда от бутон за избор, за да се задейства това събитие, видях извадката, която telerik използва за тази демонстрация, но те са дефинирали radcomboboxes в страницата .aspx, а не динамично, както направих аз. Пренебрегвам нещо, но това, което не знам. - person Tim; 22.12.2011
comment
@Tim Не мисля, че пренебрегваш нещо. Според моя опит radGrid и GridViews работят по подобен начин по отношение на модела на събитието. Тази връзка forums.asp.net/t/1313185.aspx/1 подробности нечии се борят. Ако бях на ваше място, щях да се опитам да преработя страницата, за да извадя избрания индекс променен и да накарам нещата да работят чрез команден бутон и събитието onitemcommand. Това е единственият начин, по който успешно съм предавал команди от този тип мрежи. Съжалявам, ако това не е това, което търсите - person Crab Bucket; 22.12.2011
comment
@Tim Всъщност намерих възможно решение, което включих като редакция на въпроса - person Crab Bucket; 22.12.2011
comment
Хей Тим. Благодаря за целия ви ценен принос. Това наистина провокира някои мисли, но уви не реши проблема. Намерих проблема и може да не повярвате какъв е. Вижте отговора ми по-горе. - person Tim; 22.12.2011

Проблемът беше, че задавах само свойството Value на RadComboBox, а не свойството Text. Въпреки че текстовата стойност се показваше в RadComboBox в режим на редактиране, очевидно тя показваше свойството Value. Веднага щом беше настроен, той започна да публикува точно както трябваше да прави.

                if (!(e.Item.DataItem is GridInsertionObject))
                {
                    _participantList.SelectedValue =
                        ((ReinsuranceAgreementParticipant) (e.Item.DataItem)).LegacyReinsurerID.ToString();
                    // I added this line
                    _participantList.Text = ((ReinsuranceAgreementParticipant)(e.Item.DataItem)).LegacyReinsurerID.ToString();
                }
                if (e.Item.DataItem is GridInsertionObject)
                    _participantList.EmptyMessage = "Select Reinsurer";
person Tim    schedule 22.12.2011