2013-07-12 118 views
0

我有這種感覺,這是一個菜鳥問題,但我必須錯過一些東西。Telerik Radgrid動態添加控件在回發後消失

我有一個Telerik Radgrid。在其中一列中,我添加了一些控件,在ItemDataBound事件中。這些控件用作排序的複選框,所以當用戶單擊它們時,我使用JavaScript更改了一些屬性。
當涉及到保存所有內容時,用戶單擊一個按鈕,這會導致回發。
現在,在回發之後,我的動態創建的控件消失了。
如何檢索其值以保存它們?

乾杯, 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的JavaScript:

$(".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中可用)並且我需要一些這樣的數據(如ID)來創建控件 –

+0

,您仍然可以在itemdatabound期間設置控件值等。也許你應該詳細說明你在itemdatabound事件中想要做什麼。 – ajakblackgoat

+0

更改我的代碼後,我現在創建ItemCreated上的控件。 不幸的是,當點擊保存按鈕時,ItemCreated在button_click事件之前被觸發,所以我的控件已經被重新創建(並且失去了它們的值),然後才能保存它們。 我可以從視圖狀態返回舊值嗎? –