2011-04-06 2 views
1

나는 ASPX GridView의 dataItemTemplate에 RadioButtonList이 있습니다. ButtonClick 이벤트에서 각 RadioButtonList에 대해 선택된 인덱스를 원합니다. 버튼 클릭 이벤트에서 radioButton 목록의 selectedIndex는 -1입니다. RadioList에서 버튼 클릭 이벤트에서 사용자가 선택한 값을 기억하게하려면 어떻게합니까? 그리드RadioButtonList가 버튼에서 값을 잃습니다. 클릭

EnableCallbacks 그리드에 대한

의 EnableViewState 사실이다

이 RadioList에 대한 AutoPostBack을이 거짓 사실이다.

<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; 
    } 
} 
+0

에 저장하는 것입니다 . ASP.NET 페이지 수명주기를 이해하는 것이 중요합니다. 페이지로드에 대한 컨트롤을 데이터 바인딩 한 다음 해당 버튼을 클릭하면 페이지가 다시로드되고 button_click 이벤트를 실행하기 전에 페이지로드 이벤트의 모든 내용이로드됩니다. 그래서 본질적으로 그것은 데이터 바인딩을 다시 초기화합니다. 포스트 백에서 databind하지 않으면 프레임 워크는 viewstate를 보게됩니다. –

답변

1

그리드가 페이지로드시 다시 바인딩 될 수 있으며 그 이유는 라디오 버튼 목록도 다시 바인딩되어 사용자가 선택한 값을 잃어 버리는 것입니다. 페이지로드시 if(!Page.IsPostBack)에 바인딩해야합니다.

+0

포인터에 감사드립니다. 코드 줄을 주석 처리했습니다. – Talk2me

+0

그게 효과가 있지만 내가 눈치 챘을 다른 하나는 그리드 열에 정렬을 적용하는 경우입니다. RadioList에서 선택한 값이 손실됩니다. 이 문제를 어떻게 피할 수 있습니까? – Talk2me

+0

정렬을 시도하면 그리드가 자동으로 리바 인딩되므로 선택을 다시 잃게됩니다. (그러나 선택 사항을 저장하고 DB에서 다시 채우면이 문제를 극복 할 수 있습니다.) –

0

당신은 페이지로드에 GridView을 결합하려는 경우 가장 좋은 것은이 할 수있는, 당신의 GridView에서 RadioButtonList을 읽는 databind 전에 함수를 호출하고 난 무하마드의 대답에 동의 정적 DataTable