RadioButtonList теряет значение при нажатии кнопки

У меня есть RadioButtonList в dataItemTemplate ASPX GridView. Мне нужен выбранный индекс для каждого RadioButtonList в событии ButtonClick. В событии нажатия кнопки selectedIndex для списка radioButton равен -1. Как заставить мой RadioList запомнить выбранные пользователем значения в событии нажатия кнопки.

EnableCallbacks для сетки верно

Enableviewstate для сетки верно

AutoPostBack для RadioList имеет значение false.

<DataItemTemplate>
    <dxe:ASPxRadioButtonList ID="m_RadioList" runat="server" 
        Border-BorderStyle="None" ClientInstanceName="RadioList" 
        OnInit="OnRadioListInit">
        <Border BorderStyle="None" />
        <Items>
            <dxe:ListEditItem Text="M" Value="0" />
            <dxe:ListEditItem Text="F" Value="1" />
            <dxe:ListEditItem Text="NA" Value="2" />
        </Items>
    </dxe:ASPxRadioButtonList>
</DataItemTemplate>


protected void OnASPxButtonClick(object sender, EventArgs e)
{
    for (int row = 0; row < m_ASPxGridView.VisibleRowCount; row++)
    {
        ASPxRadioButtonList radio = m_AccessPoint_UsersASPxGridView.FindRowCellTemplateControl(row,null, "m_RadioList") as ASPxRadioButtonList;

        int r = (int) radio.SelectedIndex;
    }
}

person Talk2me    schedule 06.04.2011    source источник
comment
Я согласен с ответом Мухаммеда. Важно понимать жизненный цикл страницы ASP.NET. Если вы привязываете элемент управления к загрузке страницы, а затем нажимаете эту кнопку, она перезагружает страницу, делает все в событии загрузки страницы, прежде чем оно выполнит ваше событие button_click. По сути, это повторная инициализация привязки данных. Если вы не привяжете его к данным при обратной отправке, фреймворк будет смотреть на состояние просмотра.   -  person The Muffin Man    schedule 06.04.2011


Ответы (2)


Ваша сетка может снова привязываться при загрузке страницы, и поэтому ваш список радиокнопок также снова привязывается, и вы теряете выбранное значение. Убедитесь, что вы выполняете привязку под if(!Page.IsPostBack) при загрузке страницы.

person Muhammad Akhtar    schedule 06.04.2011
comment
Спасибо за указатель, я прокомментировал эту строку кода. - person Talk2me; 06.04.2011
comment
Это работает, но я заметил еще одну вещь: если я применяю сортировку к любому из столбцов сетки. Выбранное значение RadioList будет потеряно. Как мне этого избежать. - person Talk2me; 06.04.2011
comment
если вы пытаетесь отсортировать, сетка автоматически перепривязывается, и, следовательно, вы снова потеряете выбор :( но если вы сохраните этот выбор и повторно заполните из БД, вы можете преодолеть это. - person Muhammad Akhtar; 06.04.2011
comment
Как сохранить выбор? Мой RadioList не привязан к данным. - person Talk2me; 06.04.2011
comment
Поскольку вы получаете выбранное значение в событии нажатия кнопки, предположим, что это ваша кнопка СОХРАНИТЬ, и вы сохраняете эти значения. Прежде чем это сделать, вам нужно изучить некоторые механизмы сохранения данных с помощью Gridview; вы можете легко найти в Google хороший учебник. - person Muhammad Akhtar; 06.04.2011

Если вы хотите связать GridView при загрузке страницы, лучше всего вызвать функцию перед databind, которая считывает RadioButtonList в вашем GridView и сохраняет ее в статическом DataTable

person Ilan    schedule 05.05.2012