Asp.net Telerik Radgrid动态添加的控件在回发后消失

Asp.net Telerik Radgrid动态添加的控件在回发后消失,asp.net,vb.net,telerik,telerik-grid,Asp.net,Vb.net,Telerik,Telerik Grid,我觉得这是一个新手的问题,但我肯定错过了什么 我有一个Telerik Radgrid。在其中一列中,我在ItemDataBound事件期间添加了一些控件。这些控件的功能类似于复选框,所以当人们单击它们时,我会使用Javascript更改一些属性。 在保存所有内容时,用户单击一个按钮,这会导致回发 现在,回发之后,我动态创建的控件消失了 如何检索它们的值以保存它们 干杯, 希杰 编辑: 在ItemCreated事件中,我有以下内容: If (TypeOf (e.Item) Is GridData

我觉得这是一个新手的问题,但我肯定错过了什么

我有一个Telerik Radgrid。在其中一列中,我在
ItemDataBound
事件期间添加了一些控件。这些控件的功能类似于复选框,所以当人们单击它们时,我会使用Javascript更改一些属性。
在保存所有内容时,用户单击一个按钮,这会导致回发
现在,回发之后,我动态创建的控件消失了
如何检索它们的值以保存它们

干杯, 希杰

编辑:

在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
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的单击的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;
});
现在,当我单击Save按钮时,我注意到ItemCreated事件首先触发,然后是button\u click事件
在按钮单击事件中,我有:

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
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”。

itemscreated
事件中创建并添加动态控件,而不是ItemDataBound。别忘了设置控件的ID


要访问这些控件,只需使用常规的
griddataitem.FindControl(id)
方法。

谢谢您的回复。不幸的是,在ItemCreated上,我似乎无法访问行的数据。(显然这在ItemDataBound中是可用的)我需要一些数据(比如ID)来创建控件您仍然可以在ItemDataBound期间设置控件值等。也许您应该详细说明在itemdatabound事件期间您正试图执行的操作。更改代码后,我现在在ItemCreated上创建控件。不幸的是,单击“保存”按钮时,ItemCreated会在“按钮单击”事件之前触发,因此我的控件在保存之前已重新创建(并丢失其值)。我可以从viewstate获取旧值吗?您应该能够在回发时读取控件值。如果不知道itemdatabound、itemcreate、button_click以及用于在客户端更改控件属性的javascript中的内容,我将无法为您提供帮助。很抱歉回复太晚。没有收到有关您的更新的通知。不知道您是否已经解决了这个问题,但是在查看您的更新之后,我可以看到您正在添加div元素。我上面的回答是关于添加输入控件。您可以做的是,在页面提交或保存按钮回发之前,使用JS构造一个字符串,其中包含服务器端使用的所有选定div必需值,将构造的字符串保存到隐藏的输入控件中,以便在服务器端读取隐藏控件的值以获取所有选定的div。