0

我有一个 ASP.Net 应用程序,我需要向用户展示一个项目列表,并在每个项目旁边证明一个下拉列表,每个下拉列表有 4 个选项。下拉菜单允许用户选择所选人员可以查看的项目。选项包括:无访问权限、只读权限、受限访问权限和完全访问权限。

所以,我在想一个表,有 2 列:项目名称和访问级别。

最后,一个保存按钮。

然后我需要返回所有项目(Ids?)以及所有下拉列表的选定值,可能是一个数组?然后在后面的代码中,我将创建一个 List<> 并将其传递给框架代码以存储在数据库中。

但是,我不确定如何呈现表格,以便我可以以某种方式获取项目,链接到下拉列表,并将其转换为我可以用来保存数据的东西。保存按钮需要为用户保存所有项目的访问级别。我怎样才能在 ASP.Net 中做到这一点?

为了渲染屏幕,我打算List<ProjectSecurity>从数据库中获取一个,其中 ProjectSecurity 是一个 DTO:

ProjectId
ProjectName
UserId
SecurityLevelId

其中 SecurityLevelId 为只读、无访问权限等。

然后我会遍历列表,并创建一个表,但是每行需要一个隐藏字段来表示 projectId 吗?

然后以某种方式将其恢复为保存?

我很乐意使用网格,但是使用下拉框进行内联编辑的网格似乎很难实现,还有 SaveAll 按钮。单行编辑似乎更容易。

根据下面提供的想法,我在当前拥有的网格中“硬编码”了一个虚拟列,并且可以下拉。但是,不确定如何填充 List<> 我可以从我的表中获取的下拉列表中的项目,以及如何根据当前行的选定值设置选定值:

    <Columns>
        <asp:CommandField ShowSelectButton="True" />
        <asp:BoundField DataField="Name" HeaderText="Name" />
        <asp:BoundField DataField="AccountManager" HeaderText="AccountManager" />
        <asp:BoundField DataField="ProjectCode" HeaderText="ProjectCode" />
        <asp:BoundField DataField="DurationText" HeaderText="DurationText" />

        <asp:TemplateField>
            <ItemTemplate>
                <asp:DropDownList runat="server" AutoPostBack="True">
                    <asp:ListItem
                        Enabled="True"
                        Text="Test"
                        Value="Test" />
                    <asp:ListItem
                        Enabled="True"
                        Text="Test 2"
                        Value="Tes 2" />
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>

    </Columns>
4

1 回答 1

1

我有这种东西的telerik奢侈,但你正在寻找的结构是这样的

                <asp:GridView>
                    <Columns>
                        <asp:BoundField />
                        <asp:TemplateField>
                            <EditItemTemplate>
                                <asp:DropDownList></asp:DropDownList>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:DropDownList></asp:DropDownList>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

IIRC 有一个项目数据绑定事件,您可以在其中将下拉列表的选定值设置为所需的访问级别

在 Telerik 的情况下,有一个更新事件对于将编辑保存到数据库非常有用,您将需要类似的东西

它并不简单,但在第一次之后它很容易复制。

Bellow 是一个示例 itemDataBound 命令,尽管它确实使用了 Telerik,但遗憾的是它与复制/粘贴不太相关。使用 e.Item.FindControl 将允许您对下拉列表进行数据绑定,并且在触发更新命令时,您可以获得编辑模式下的行列表,以便全部更新。这是我的首选方法,但我同意它并不简单。希望 VB 没问题,这是我首先发现的。

Private Sub MvrgStreams_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles rgStreams.ItemDataBound
    Dim loRow As DataRowView
    If TypeOf e.Item Is Telerik.Web.UI.GridDataItem Then
        Dim lrgRow As Telerik.Web.UI.GridDataItem = CType(e.Item, Telerik.Web.UI.GridDataItem)
        Dim llbl As Label
        loRow = e.Item.DataItem
        If Not loRow.Item(1) Is DBNull.Value Then
            llbl = e.Item.FindControl("lblStreamName")
            llbl.Text = loRow.Item(1)
        End If
        If Not loRow.Item(0) Is DBNull.Value Then
            llbl = e.Item.FindControl("lblStreamId")
            llbl.Text = loRow.Item(0)
        End If
        If Not loRow.Item(2) Is DBNull.Value Then
            llbl = e.Item.FindControl("lblAvailFrom")
            llbl.Text = loRow.Item(2) '.ToString("MM/dd/yyyy HH:mm")
        End If
        If Not loRow.Item(3) Is DBNull.Value Then
            llbl = e.Item.FindControl("lblLastUp")
            llbl.Text = loRow.Item(3) '.ToString("MM/dd/yyyy HH:mm")
        End If
        If Not loRow.Item(4) Is DBNull.Value Then
            llbl = e.Item.FindControl("lblLastEff")
            llbl.Text = loRow.Item(4) '.ToString("MM/dd/yyyy HH:mm")
        End If
        If Not loRow.Item(5) Is DBNull.Value Then
            llbl = e.Item.FindControl("lblLastPost")
            llbl.Text = loRow.Item(5) '.ToString("MM/dd/yyyy HH:mm")
        End If
        llbl = e.Item.FindControl("lblType")
        If Not loRow.Item(6) Is DBNull.Value Then
            llbl.Text = loRow.Item(6)
        End If
        llbl = e.Item.FindControl("lblUnit")
        If Not loRow.Item(7) Is DBNull.Value Then
            llbl.Text = loRow.Item(7)
        End If
        llbl = e.Item.FindControl("lblZone")
        If Not loRow.Item(8) Is DBNull.Value Then
            llbl.Text = loRow.Item(8)
        End If
        llbl = e.Item.FindControl("lblZoneTo")
        If Not loRow.Item(9) Is DBNull.Value Then
            llbl.Text = loRow.Item(9)
        End If
        llbl = e.Item.FindControl("lblLoc")
        If Not loRow.Item(10) Is DBNull.Value Then
            llbl.Text = loRow.Item(10)
        End If
        llbl = e.Item.FindControl("lblCom")
        If Not loRow.Item(11) Is DBNull.Value Then
            llbl.Text = loRow.Item(11)
        End If
        llbl = e.Item.FindControl("lblInst")
        If Not loRow.Item(12) Is DBNull.Value Then
            llbl.Text = loRow.Item(12)
        End If
        llbl = e.Item.FindControl("lblPlant")
        If Not loRow.Item(13) Is DBNull.Value Then
            llbl.Text = loRow.Item(13)
        End If
    End If

End Sub
于 2013-08-09T22:09:49.577 回答