坚持动态表跨回传 [英] Persisting Dynamic Table Across postback

查看:158
本文介绍了坚持动态表跨回传的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我这是在code创建背后有一小桌。在VB code表填充根据从查询返回的数据当选择组合框的值。的code创建具有两个单元之一的标签,一个用于一个下拉列表在数据的每一行的行。我有麻烦preserving选择的下拉了为回发后每行创建的列表值。

当该表最初填充我的数据存储在ViewState的值并重新基于在pageLoad的这些设置的表。问题是我每次更改值的下拉菜单,然后使通过点击保存设置所有的设置回发发生不正确保存,因为它们是恢复保存,甚至被调用之前的时间。

我期待,以保持在回传的值,但仍当选择一个新的帐户从数据库中更新值。我已经尝试几种方法可以做到这一点,我的code经历了两个问题:

当我在标记表的EnableViewState =真:
当我从组合框中选择一个项目,请在下拉列表中选择的值剩下一个新的帐户时,他们应该清楚在这个时候并使用新的数据库值。

当我在标记表的EnableViewState =假:
任何回发复位dropdownlists自己的数据库值。即使单击保存这立即postsback保存数值到数据库只是重新保存其当前数据库值而忽略了选择的值。

背后code:

 进口System.Data.SqlClient的进口Telerik.Web.UI公共类AccountSettings2
    继承页    私人_selectedAccountID作为整数
    受保护的_truckPermissions方式列表(中PermissionData2)    私人小组Page_Init(发送者为对象,E作为EventArgs的)把手Me.Init        _truckPermissions =新名单(中PermissionData2)        如果不IsNothing(会话(SelectedAccountID))然后,
            _selectedAccountID =会议(SelectedAccountID)
        万一        如果没有的IsPostBack然后            昏暗dtAccounts作为新的DataTable(帐户)
            昏暗的COL1作为的DataColumn =新的DataColumn()
            col1.DataType = System.Type.GetType(System.Int32)
            col1.ColumnName =帐户ID
            dtAccounts.Columns.Add(COL1)
            昏暗的COL2作为的DataColumn =新的DataColumn()
            col2.DataType = System.Type.GetType(System.String)
            col2.ColumnName =姓名
            dtAccounts.Columns.Add(COL2)            昏暗ROW1作为的DataRow
            昏暗ROW2作为的DataRow
            昏暗ROW3作为的DataRow
            昏暗ROW4作为的DataRow
            ROW1 = dtAccounts.NewRow()
            ROW1(帐户ID)= 1
            ROW1(姓名)=科目1
            dtAccounts.Rows.Add(ROW1)
            ROW2 = dtAccounts.NewRow()
            ROW2(帐户ID)= 2
            ROW2(姓名)=帐户2
            dtAccounts.Rows.Add(ROW2)
            ROW3 = dtAccounts.NewRow()
            ROW3(帐户ID)= 3
            ROW3(姓名)=账户3
            dtAccounts.Rows.Add(ROW3)
            ROW4 = dtAccounts.NewRow()
            ROW4(帐户ID)= 4
            ROW4(姓名)=账户4
            dtAccounts.Rows.Add(ROW4)            rcbAccounts.DataValueField =帐户ID
            rcbAccounts.DataTextField =姓名
            rcbAccounts.DataSource = dtAccounts
            rcbAccounts.DataBind()        万一    结束小组    保护小组的Page_Load(BYVAL发件人为对象,BYVAL E上System.EventArgs)把手Me.Load        如果没有的IsPostBack然后
            如果_selectedAccountID> 0,则
                rcbAccounts.SelectedValue = _selectedAccountID
                SelectAccount(_selectedAccountID)
            万一
        万一    结束小组#REGIONUI更新    私人小组SelectAccount(帐户作为整数)        _selectedAccountID =帐户ID
        会议(SelectedAccountID)=帐户ID
        CreateTruckPermissionsData(帐户)    结束小组    私人小组CreateTruckPermissionsData(accessTypeID作为整数)        tblTruckPermissions.Rows.Clear()        _truckPermissions.Add(新PermissionData2(1,权限1,1权限,accessTypeID))
        _truckPermissions.Add(新PermissionData2(2,权限2,2许可,accessTypeID))
        _truckPermissions.Add(新PermissionData2(3,许可3,权限3,accessTypeID))
        _truckPermissions.Add(新PermissionData2(4,权限4,4权限,accessTypeID))
        ViewState中(_ truckPermissions)= _truckPermissions        昏暗dtAccessTypes作为新的DataTable(AccessTypes)
        昏暗的COL1作为的DataColumn =新的DataColumn()
        col1.DataType = System.Type.GetType(System.Int32)
        col1.ColumnName =AccessTypeID
        dtAccessTypes.Columns.Add(COL1)
        昏暗的COL2作为的DataColumn =新的DataColumn()
        col2.DataType = System.Type.GetType(System.String)
        col2.ColumnName =说明
        dtAccessTypes.Columns.Add(COL2)        昏暗ROW1作为的DataRow
        昏暗ROW2作为的DataRow
        昏暗ROW3作为的DataRow
        昏暗ROW4作为的DataRow
        ROW1 = dtAccessTypes.NewRow()
        ROW1(AccessTypeID)= 1
        ROW1(描述)=1型
        dtAccessTypes.Rows.Add(ROW1)        ROW2 = dtAccessTypes.NewRow()
        ROW2(AccessTypeID)= 2
        ROW2(描述)=2型
        dtAccessTypes.Rows.Add(ROW2)
        ROW3 = dtAccessTypes.NewRow()
        ROW3(AccessTypeID)= 3
        ROW3(描述)=类型3
        dtAccessTypes.Rows.Add(ROW3)
        ROW4 = dtAccessTypes.NewRow()
        ROW4(AccessTypeID)= 4
        ROW4(描述)=4型
        dtAccessTypes.Rows.Add(ROW4)        对于每个PD作为PermissionData2在_truckPermissions
            昏暗TR作为新的TableRow()
            昏暗的TD作为新的TableCell()
            昏暗TD2作为新的TableCell()
            昏暗l由于新标签()
            朦胧DDL作为新RadDropDownList()            l.Text = pd.Name
            ddl.ID =ddlTruckPermission+ pd.ID.ToString()
            ddl.DataTextField =说明
            ddl.DataValueField =AccessTypeID
            ddl.DataSource = dtAccessTypes
            ddl.DataBind()
            ddl.SelectedValue = pd.HasAccess            td.Controls.Add(升)
            td2.Controls.Add(DDL)
            tr.Cells.Add(TD)
            tr.Cells.Add(TD2)            tblTruckPermissions.Rows.Add(TR)
        下一个    结束小组    私人小组RefreshTruckSettings()        如果_selectedAccountID = 0。然后
            返回
        万一        对于每一个r作为的TableRow在tblTruckPermissions.Rows
            对于每个C作为控制在r.Cells(1).Controls
                如果c.ID.Contains(ddlTruckPermission),然后
                    朦胧DDL作为RadDropDownList = DirectCast(C,RadDropDownList)                    昏暗Pd为PermissionData2 = _truckPermissions.Find(功能(X)= x.ID Integer.Parse(ddl.ID.Substring(0 +ddlTruckPermission。长度,ddl.ID.Length - ddlTruckPermission。长度)))                    如果未IsNothing(PD)。然后
                        ddl.SelectedValue = pd.HasAccess
                    万一
                万一
            下一个
        下一个    结束小组#END地区#REGION事件    保护小组btnSavePermissions_Click(发送者为对象,E作为EventArgs的)        如果_selectedAccountID> 0,则            昏暗permissionUpdates方式列表(中PermissionUpdate)=新名单(中PermissionUpdate)()            对于每一个r作为的TableRow在tblTruckPermissions.Rows
                对于每个C作为控制在r.Cells(1).Controls
                    如果c.ID.Contains(ddlTruckPermission),然后
                        朦胧DDL作为RadDropDownList = DirectCast(C,RadDropDownList)
                        permissionUpdates.Add(新PermissionUpdate(Integer.Parse(ddl.ID.LastIndexOf(ddlTruckPermission)),假ddl.SelectedValue))
                    万一
                下一个
            下一个            code保存权限数据库        万一    结束小组    保护小组rcbAccounts_SelectedIndexChanged(发送者为对象,E为RadComboBoxSelectedIndexChangedEventArgs)        昏暗newIndex作为整数        如果(Integer.TryParse(e.Value,newIndex))然后
            SelectAccount(newIndex)
        万一    结束小组#END地区末级
<序列化>
公共类PermissionData2    私人_id作为整数
    私人_name作为字符串
    私人_description作为字符串
    私人_hasAccess作为整数    公共属性ID()作为整数        得到
            返回_id
        到底得的
        设置(值作为整数)
            _id =价值
        结束设定    高端物业    公共属性Name()作为字符串        得到
            返回_name
        到底得的
        设置(值作为字符串)
            _name =价值
        结束设定    高端物业    公共属性Description()作为字符串        得到
            返回_description
        到底得的
        设置(值作为字符串)
            _description =价值
        结束设定    高端物业    公共财产HasAccess()作为整数        得到
            返回_hasAccess
        到底得的
        设置(值作为整数)
            _hasAccess =价值
        结束设定    高端物业    的Public Sub New()        _id = 0
        _name =名称
        _description =说明
        _hasAccess = 0    结束小组    公共子新(ID为整数,字符串类型,说明作为字符串,hasAccess作为整数)        _id = ID
        _name =名称
        _description =说明
        _hasAccess = hasAccess    结束小组末级

ASPX:

 <%@页面语言=VBAutoEventWireup =假
    codeBehind =AccountSettings2.aspx.vb继承=AccountSettings2%GT;!< D​​OCTYPE HTML PUBLIC - // W3C // DTD XHTML 1.0过渡// ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">< HTML的xmlns =htt​​p://www.w3.org/1999/xhtml>
<头ID =头像1=服务器>
    <链接rel =stylesheet属性类型=文/ CSS的href =风格/ default.css/>
    <标题>帐户设置< /标题>
< /头>
<身体GT;
    <表ID =form1的=服务器>        < ASP:的ScriptManager =服务器ID =ScriptManager1>< / ASP:ScriptManager的>    < ASP:的UpdatePanel ID =UpdatePanel1=服务器的UpdateMode =始终>
    <&的ContentTemplate GT;        < Telerik的:radcombobox控件ID =rcbAccounts=服务器HEIGHT =200WIDTH =200
            DropDownAutoWidth =已启用EmptyMessage =选择一个帐户HighlightTemplatedItems =真
            EnableLoadOnDemand =真正的过滤器=包含
            OnSelectedIndexChanged =rcbAccounts_SelectedIndexChanged的AutoPostBack =真
            标签=帐户:皮肤=Office2010Silver/>        < ASP:表ID =tblTruckPermissions=服务器的EnableViewState =真/>        < ASP:按钮的ID =btnSavePermissions=服务器文本=保存的OnClick =btnSavePermissions_Click/>    < /&的ContentTemplate GT;
< / ASP:的UpdatePanel>< /表及GT;
< /身体GT;
< / HTML>


解决方案

我找到了一个更好的方式来处理我的方案。我用Repeater控件来处理,而不是试图做手工几乎所有的code的。我用的http://weblogs.asp.net/infinitiesloop/TRULY-Understanding-Dynamic-Controls-_2800_Part-4_2900_帮助指导我。谢谢克鲁克斯顿凯西在这方面的工作有很大帮助。

 < ASP:直放站ID =rptTruckPermissions=服务器的EnableViewState =真OnItemDataBound =rptTruckPermissions_ItemDataBound>
                            <&HeaderTemplate中GT;
                                <表>
                            < / HeaderTemplate中>
                            <&ItemTemplate中GT;
                                &所述; TR>
                                    < TD><%#DataBinder.Eval的(的Container.DataItem,PermissionName)%>< / TD>
                                    < TD>< Telerik的:RadDropDownList =服务器ID =ddlTruckPermissionAccessTypes/>< / TD>
                                < / TR>
                            < / ItemTemplate中>
                            < FooterTemplate>
                                < /表>
                            < / FooterTemplate>
                        < / ASP:直放站>    保护小组的Page_Load(BYVAL发件人为对象,BYVAL E上System.EventArgs)把手Me.Load        如果没有的IsPostBack然后            如果不IsNothing(_accountDetails)然后
                SelectAccount(_accountDetails.AccountID)
            万一        万一    结束小组私人小组SelectAccount(帐户作为整数)        _selectedAccountID =帐户ID
        会议(SelectedAccountID)=帐户ID        BindTruckPermissions()
    结束小组    私人小组BindTruckPermissions()        rptTruckPermissions.DataSource = GetPermissionData(_selectedAccountID,PermissionCategory.Truck)
        rptTruckPermissions.DataBind()    结束小组保护小组rptTruckPermissions_ItemDataBound(发送者为对象,E为RepeaterItemEventArgs)        如果e.Item.ItemType = ListItemType.Item或者e.Item.ItemType = ListItemType.AlternatingItem然后            昏暗 - [R作为DataRowView的= CTYPE(e.Item.DataItem,DataRowView的)
            朦胧DDL作为RadDropDownList = CTYPE(e.Item.FindControl(ddlTruckPermissionAccessTypes),RadDropDownList)
            选择案例R(PermissionTypeID)                案例PermissionType.LegacyBasic
                    ddl.DataSource = GetLegacyWebAccessTypes(PermissionType.LegacyBasic)
                案例PermissionType.LegacyPublisher
                    ddl.DataSource = GetLegacyWebAccessTypes(PermissionType.LegacyPublisher)
            结束选择            'ddl.ID =ddlTruckPermission+ pd.ID.ToString()
            ddl.DataTextField =说明
            ddl.DataValueField =AccessTypeID
            ddl.DataBind()            如果IsDBNull以便(R(AccessTypeID))然后,
                ddl.SelectedValue = LegacyWebAccessType.NoAccess
            其他
                ddl.SelectedValue = R(AccessTypeID)
            万一        万一    结束小组

I have a table which is created in the code behind. In the vb code the table is populated based on the data returned from a query when a combobox value is selected. The code creates a row with two cells one for a label and one for a drop down list for each row in the data. I'm having trouble preserving the selected drop down list values that are created for each row after postback.

When the table is initially populated I store the data in a ViewState value and recreate the table based on these settings in PageLoad. The problem is every time I change values for the drop downs and then cause a postback to happen by clicking save settings all of the settings are incorrectly saved because they are reverted before the save is even called.

I'm looking to maintain the values across postbacks but still update the values from the database when a new account is selected. I've attempted several ways to do this and experienced two issues with my code:

When I have EnableViewState = "true" on the table in markup: When I select an item from the combobox to select a new account the selected values in the drop down lists are remaining when they should clear at this time and use the new database values.

When I have EnableViewState = "false" on the table in markup: Any postback resets the dropdownlists to their database values. Even clicking "Save" which immediately postsback to save the values to the database will just resave their current database values and ignore the selected values.

code behind:

Imports System.Data.SqlClient

Imports Telerik.Web.UI

Public Class AccountSettings2
    Inherits Page

    Private _selectedAccountID As Integer
    Protected _truckPermissions As List(Of PermissionData2)

    Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init

        _truckPermissions = New List(Of PermissionData2)

        If Not IsNothing(Session("SelectedAccountID")) Then
            _selectedAccountID = Session("SelectedAccountID")
        End If

        If Not IsPostBack Then

            Dim dtAccounts As New DataTable("Accounts")
            Dim col1 As DataColumn = New DataColumn()
            col1.DataType = System.Type.GetType("System.Int32")
            col1.ColumnName = "AccountID"
            dtAccounts.Columns.Add(col1)
            Dim col2 As DataColumn = New DataColumn()
            col2.DataType = System.Type.GetType("System.String")
            col2.ColumnName = "Name"
            dtAccounts.Columns.Add(col2)

            Dim row1 As DataRow
            Dim row2 As DataRow
            Dim row3 As DataRow
            Dim row4 As DataRow
            row1 = dtAccounts.NewRow()
            row1("AccountID") = 1
            row1("Name") = "Account 1"
            dtAccounts.Rows.Add(row1)
            row2 = dtAccounts.NewRow()
            row2("AccountID") = 2
            row2("Name") = "Account 2"
            dtAccounts.Rows.Add(row2)
            row3 = dtAccounts.NewRow()
            row3("AccountID") = 3
            row3("Name") = "Account 3"
            dtAccounts.Rows.Add(row3)
            row4 = dtAccounts.NewRow()
            row4("AccountID") = 4
            row4("Name") = "Account 4"
            dtAccounts.Rows.Add(row4)

            rcbAccounts.DataValueField = "AccountID"
            rcbAccounts.DataTextField = "Name"
            rcbAccounts.DataSource = dtAccounts
            rcbAccounts.DataBind()

        End If

    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not IsPostBack Then
            If _selectedAccountID > 0 Then
                rcbAccounts.SelectedValue = _selectedAccountID
                SelectAccount(_selectedAccountID)
            End If
        End If

    End Sub

#Region "UI Updates"

    Private Sub SelectAccount(accountID As Integer)

        _selectedAccountID = accountID
        Session("SelectedAccountID") = accountID
        CreateTruckPermissionsData(accountID)

    End Sub

    Private Sub CreateTruckPermissionsData(accessTypeID As Integer)

        tblTruckPermissions.Rows.Clear()

        _truckPermissions.Add(New PermissionData2(1, "Permission 1", "Permission 1", accessTypeID))
        _truckPermissions.Add(New PermissionData2(2, "Permission 2", "Permission 2", accessTypeID))
        _truckPermissions.Add(New PermissionData2(3, "Permission 3", "Permission 3", accessTypeID))
        _truckPermissions.Add(New PermissionData2(4, "Permission 4", "Permission 4", accessTypeID))
        ViewState("_truckPermissions") = _truckPermissions

        Dim dtAccessTypes As New DataTable("AccessTypes")
        Dim col1 As DataColumn = New DataColumn()
        col1.DataType = System.Type.GetType("System.Int32")
        col1.ColumnName = "AccessTypeID"
        dtAccessTypes.Columns.Add(col1)
        Dim col2 As DataColumn = New DataColumn()
        col2.DataType = System.Type.GetType("System.String")
        col2.ColumnName = "Description"
        dtAccessTypes.Columns.Add(col2)

        Dim row1 As DataRow
        Dim row2 As DataRow
        Dim row3 As DataRow
        Dim row4 As DataRow
        row1 = dtAccessTypes.NewRow()
        row1("AccessTypeID") = 1
        row1("Description") = "Type 1"
        dtAccessTypes.Rows.Add(row1)

        row2 = dtAccessTypes.NewRow()
        row2("AccessTypeID") = 2
        row2("Description") = "Type 2"
        dtAccessTypes.Rows.Add(row2)
        row3 = dtAccessTypes.NewRow()
        row3("AccessTypeID") = 3
        row3("Description") = "Type 3"
        dtAccessTypes.Rows.Add(row3)
        row4 = dtAccessTypes.NewRow()
        row4("AccessTypeID") = 4
        row4("Description") = "Type 4"
        dtAccessTypes.Rows.Add(row4)

        For Each pd As PermissionData2 In _truckPermissions
            Dim tr As New TableRow()
            Dim td As New TableCell()
            Dim td2 As New TableCell()
            Dim l As New Label()
            Dim ddl As New RadDropDownList()

            l.Text = pd.Name
            ddl.ID = "ddlTruckPermission" + pd.ID.ToString()
            ddl.DataTextField = "Description"
            ddl.DataValueField = "AccessTypeID"
            ddl.DataSource = dtAccessTypes
            ddl.DataBind()
            ddl.SelectedValue = pd.HasAccess

            td.Controls.Add(l)
            td2.Controls.Add(ddl)
            tr.Cells.Add(td)
            tr.Cells.Add(td2)

            tblTruckPermissions.Rows.Add(tr)
        Next

    End Sub

    Private Sub RefreshTruckSettings()

        If _selectedAccountID = 0 Then
            Return
        End If

        For Each r As TableRow In tblTruckPermissions.Rows
            For Each c As Control In r.Cells(1).Controls
                If c.ID.Contains("ddlTruckPermission") Then
                    Dim ddl As RadDropDownList = DirectCast(c, RadDropDownList)

                    Dim pd As PermissionData2 = _truckPermissions.Find(Function(x) x.ID = Integer.Parse(ddl.ID.Substring(0 + "ddlTruckPermission".Length, ddl.ID.Length - "ddlTruckPermission".Length)))

                    If Not IsNothing(pd) Then
                        ddl.SelectedValue = pd.HasAccess
                    End If
                End If
            Next
        Next

    End Sub

#End Region

#Region "Events"

    Protected Sub btnSavePermissions_Click(sender As Object, e As EventArgs)

        If _selectedAccountID > 0 Then

            Dim permissionUpdates As List(Of PermissionUpdate) = New List(Of PermissionUpdate)()

            For Each r As TableRow In tblTruckPermissions.Rows
                For Each c As Control In r.Cells(1).Controls
                    If c.ID.Contains("ddlTruckPermission") Then
                        Dim ddl As RadDropDownList = DirectCast(c, RadDropDownList)
                        permissionUpdates.Add(New PermissionUpdate(Integer.Parse(ddl.ID.LastIndexOf("ddlTruckPermission")), False, ddl.SelectedValue))
                    End If
                Next
            Next

            ' Code to save permissions to database

        End If

    End Sub

    Protected Sub rcbAccounts_SelectedIndexChanged(sender As Object, e As RadComboBoxSelectedIndexChangedEventArgs)

        Dim newIndex As Integer

        If (Integer.TryParse(e.Value, newIndex)) Then
            SelectAccount(newIndex)
        End If

    End Sub

#End Region

End Class


<Serializable>
Public Class PermissionData2

    Private _id As Integer
    Private _name As String
    Private _description As String
    Private _hasAccess As Integer

    Public Property ID() As Integer

        Get
            Return _id
        End Get
        Set(value As Integer)
            _id = value
        End Set

    End Property

    Public Property Name() As String

        Get
            Return _name
        End Get
        Set(value As String)
            _name = value
        End Set

    End Property

    Public Property Description() As String

        Get
            Return _description
        End Get
        Set(value As String)
            _description = value
        End Set

    End Property

    Public Property HasAccess() As Integer

        Get
            Return _hasAccess
        End Get
        Set(value As Integer)
            _hasAccess = value
        End Set

    End Property

    Public Sub New()

        _id = 0
        _name = Name
        _description = Description
        _hasAccess = 0

    End Sub

    Public Sub New(id As Integer, name As String, description As String, hasAccess As Integer)

        _id = id
        _name = name
        _description = description
        _hasAccess = hasAccess

    End Sub

End Class

aspx:

    <%@ Page Language="vb" AutoEventWireup="false"
    CodeBehind="AccountSettings2.aspx.vb" Inherits="AccountSettings2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <link rel="stylesheet" type="text/css" href="styles/default.css" />
    <title>Account Settings</title>
</head>
<body>
    <form id="form1" runat="server">

        <asp:ScriptManager runat="server" ID="ScriptManager1"></asp:ScriptManager>

    <asp:UpdatePanel id="UpdatePanel1" runat="server" UpdateMode="Always">
    <ContentTemplate>

        <telerik:RadComboBox ID="rcbAccounts" runat="server" Height="200" Width="200"
            DropDownAutoWidth="Enabled" EmptyMessage="Select an Account" HighlightTemplatedItems="true"
            EnableLoadOnDemand="true" Filter="Contains"
            OnSelectedIndexChanged="rcbAccounts_SelectedIndexChanged" AutoPostBack ="true"
            Label="Accounts: " Skin="Office2010Silver" />

        <asp:Table ID="tblTruckPermissions" runat="server" EnableViewState="true" />

        <asp:Button ID="btnSavePermissions" runat="server" Text="Save" OnClick="btnSavePermissions_Click" />

    </ContentTemplate>
</asp:UpdatePanel>

</form>
</body>
</html>

解决方案

I found a much better way to handle my scenario. I used the repeater control to handle almost all of the code instead of trying to do it manually. I used http://weblogs.asp.net/infinitiesloop/TRULY-Understanding-Dynamic-Controls-_2800_Part-4_2900_ to help guide me. Thank you to Casey Crookston for much help in working on this.

<asp:Repeater ID="rptTruckPermissions" runat="server" EnableViewState="true" OnItemDataBound="rptTruckPermissions_ItemDataBound">
                            <HeaderTemplate>
                                <table>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <tr>
                                    <td><%# DataBinder.Eval(Container.DataItem, "PermissionName") %></td>
                                    <td><telerik:RadDropDownList runat="server" ID="ddlTruckPermissionAccessTypes" /></td>
                                </tr>
                            </ItemTemplate>
                            <FooterTemplate>
                                </table>
                            </FooterTemplate>
                        </asp:Repeater>

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not IsPostBack Then

            If Not IsNothing(_accountDetails) Then
                SelectAccount(_accountDetails.AccountID)
            End If

        End If

    End Sub

Private Sub SelectAccount(accountID As Integer)

        _selectedAccountID = accountID
        Session("SelectedAccountID") = accountID

        BindTruckPermissions()


    End Sub

    Private Sub BindTruckPermissions()

        rptTruckPermissions.DataSource = GetPermissionData(_selectedAccountID, PermissionCategory.Truck)
        rptTruckPermissions.DataBind()

    End Sub

Protected Sub rptTruckPermissions_ItemDataBound(sender As Object, e As RepeaterItemEventArgs)

        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

            Dim r As DataRowView = CType(e.Item.DataItem, DataRowView)
            Dim ddl As RadDropDownList = CType(e.Item.FindControl("ddlTruckPermissionAccessTypes"), RadDropDownList)
            Select Case r("PermissionTypeID")

                Case PermissionType.LegacyBasic
                    ddl.DataSource = GetLegacyWebAccessTypes(PermissionType.LegacyBasic)
                Case PermissionType.LegacyPublisher
                    ddl.DataSource = GetLegacyWebAccessTypes(PermissionType.LegacyPublisher)
            End Select

            'ddl.ID = "ddlTruckPermission" + pd.ID.ToString()
            ddl.DataTextField = "Description"
            ddl.DataValueField = "AccessTypeID"
            ddl.DataBind()

            If IsDBNull(r("AccessTypeID")) Then
                ddl.SelectedValue = LegacyWebAccessType.NoAccess
            Else
                ddl.SelectedValue = r("AccessTypeID")
            End If

        End If

    End Sub

这篇关于坚持动态表跨回传的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆