Событие 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 работают одинаково в отношении модели событий, поэтому это ТАК, ответ может помочь вам разобраться. Удачи - я изначально думал, что этого не может быть, но, возможно, есть путь вперед.

person Crab Bucket    schedule 21.12.2011
comment
Спасибо, Тим, но я не ищу событие selectedindexchanged для radgrid. Я хочу, чтобы выбранный индекс радкомбокса был изменен. Я знаю, что мне не нужна кнопка выбора для срабатывания этого события, я видел образец, который Telerik использует для этой демонстрации, но они определили radcomboboxes на странице .aspx, а не динамически, как я. Я не замечаю чего-то, чего не знаю. - person Tim; 22.12.2011
comment
@ Тим Я не думаю, что ты что-то переусердствуешь. По моему опыту, radGrid и GridView работают схожим образом в отношении модели событий. Эта ссылка forum.asp.net/t/1313185.aspx/1 подробнее кто-то борется. На вашем месте я бы попытался изменить дизайн страницы, чтобы убрать selectedindexchanged и заставить все работать с помощью командной кнопки и события 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