2013-07-12 4 views
0

나는 이것이 신참 문제라는 느낌을 갖지만, 뭔가 빠뜨린 것 같습니다.Telerik Radgrid 동적으로 추가 된 컨트롤이 포스트 백 이후 사라집니다.

저는 입니다. Telerik Radgrid입니다. 하나의 열에서 ItemDataBound 이벤트 중 일부 컨트롤을 추가합니다. 이러한 컨트롤은 정렬의 확인란으로 사용되므로 사람들이 클릭 할 때 자바 스크립트를 사용하여 일부 속성을 변경합니다.
모든 것을 저장하는 경우 사용자가 단추를 클릭하면 다시 게시가 발생합니다.
이제 포스트 백 후에 동적으로 생성 된 컨트롤이 사라졌습니다.
저장하기 위해 값을 검색하려면 어떻게해야합니까?

건배, CJ

편집 : ItemCreated 이벤트에

나는이 있습니다

If (TypeOf (e.Item) Is GridDataItem) Then 
Dim dataItem As GridDataItem = CType(e.Item, GridDataItem) 
Dim diCell As TableCell = dataItem("Periode") 

Dim tbl As Table = CType(diCell.FindControl("tblPeriode"), Table) 

Dim cell As TableCell 
Dim sdsPerioden As New SqlDataSource() 
sdsPerioden.ConnectionString = cs 
sdsPerioden.SelectCommandType = SqlDataSourceCommandType.StoredProcedure 
sdsPerioden.SelectCommand = "OPLEIDING_PERIODE_JAAR_SELECT_BY_OPLEIDING_ID" 
sdsPerioden.SelectParameters.Add(New Parameter("INT_OPLEIDING_ID", DbType.Int32, Session("OPLEIDING_ID"))) 
Dim dv As DataView = CType(sdsPerioden.Select(DataSourceSelectArguments.Empty), DataView) 

Dim iJaar As Integer = 0 
sJaren = New List(Of String) 

For Each row As DataRow In dv.Table.Rows 
    cell = New TableCell() 
    cell.BorderStyle = BorderStyle.None 
    cell.Style("margin-right") = "5px" 
    cell.Style("padding") = "0px" 
    cell.Width = Unit.Pixel((row("PERIODEN_PER_JAAR") * (15 + 2)) + ((row("PERIODEN_PER_JAAR")/2) * 3) + 1) 
    For i As Integer = 1 To row("PERIODEN_PER_JAAR") 
     Dim div As HtmlGenericControl = New HtmlGenericControl("div") 
     dv.ID = "div" + iJaar.ToString().PadLeft(2, "0") + iPeriode.ToString().PadLeft(2, "0") 
     dv.Style.Add("height", "15px") 
     dv.Style.Add("width", "15px") 
     dv.Style.Add("display", "inline-block") 
     dv.Style.Add("border-style", "solid") 
     dv.Style.Add("border-width", "1px") 
     dv.Style.Add("border-color", sKleur) 
     dv.Style.Add("background-color", "#FFFFFF") 
     dv.Attributes("IS_CHECKED") = "0" 
     dv.Attributes("class") = "periodeCheck" 
     cell.Controls.Add(div) 
    Next 
    tbl.Rows(0).Cells.Add(cell) 
Next 
End If 

div의 클릭에 응답하는 자바 스크립트 :

$(".periodeCheck").click(function() {    
    if ($(this).attr('IS_CHECKED') == "0") 
    { 
     var color = $(this).css('border-left-color'); 
     $(this).attr('IS_CHECKED', '1');    
     $(this).css('border-style', 'none'); 
     $(this).css('background-color', color);      
    } 
    else 
    { 
     var color = $(this).css('background-color'); 
     $(this).attr('IS_CHECKED', '0'); 
     $(this).css('border-style', 'solid'); 
     $(this).css('border-width', '1px'); 
     $(this).css('border-color', color); 
     $(this).css('background-color', "#FFFFFF"); 

    } 
    return false; 
}); 

이제 저장 단추를 클릭하면 ItemCreated 이벤트가 먼저 발생하고 Button_Click 이벤트가 발생합니다. Button_Click 이벤트에서
나는이 있습니다

For i = 0 To rgOpleidingLeeritem.MasterTableView.Items.Count - 1 
    Dim tbl As Table = CType(rgOpleidingLeeritem.MasterTableView.Items(i).FindControl("tblPeriode"), Table) 
    Dim div As HtmlGenericControl 
    For Each cell As TableCell In tbl.Rows(0).Cells 
     For Each ctl As Control In cell.Controls 
      div = CType(ctl, HtmlGenericControl) 
      If (div.Attributes("IS_CHECKED") = "1") Then 
       'Do something 
      End If   
     Next 
    Next 
Next 

'
div의이 속성이 할 요소 관리자에 따르면'확인 '아무리 내가 얼마나 많은 div의, 부분에 도달되지 않습니다 무언가를하지'IS_CHECKED '을 클릭하면'1 '로 설정됩니다.

답변

0

ItemDataBound 대신 ItemCreated 이벤트에 동적 컨트롤을 만들고 추가하십시오. 컨트롤의 ID를 설정하는 것을 잊지 마십시오.

컨트롤에 액세스하려면 일반 griddataitem.FindControl(id) 방법을 사용하십시오.

+0

답장을 보내 주셔서 감사합니다. 불행히도 ItemCreated에서 행의 데이터에 액세스 할 수없는 것 같습니다. (분명히 이것은 ItemDataBound에서 사용 가능합니다) 그리고 나는 IDd와 같은 데이터를 필요로합니다. –

+0

itemdatabound 동안 컨트롤 값 등을 설정할 수 있습니다. itemdatabound 이벤트 중에 정확히 무엇을하려고하는지에 대한 세부 정보를 제공해야합니다. – ajakblackgoat

+0

코드를 변경 한 후 이제 ItemCreated에서 컨트롤을 만듭니다. Save 버튼을 클릭하면 ItemCreated가 button_click 이벤트 전에 실행되므로 컨트롤을 저장하기 전에 내 컨트롤이 다시 만들어지고 값이 손실됩니다. viewstate에서 이전 값을 다시 가져올 수 있습니까? –

관련 문제