2010-10-08 78 views
1

我想为不同的用户角色提供不同的选项。这里是我的代码:在GridView编辑模板中填充下拉列表的函数

Private Function GetApprovedBy() As String 
     If User.Identity.Name = "officer" Then 
      Return "Approved by Officer" 
     ElseIf User.Identity.Name = "manager" Then 
      Return "Approved by Manager" 
     Else 
      Return String.Empty 
     End If 
    End Function 

然后在我的gridview的模板,我有:

<EditItemTemplate> 
        <asp:DropDownList ID="ApprovalEdit" runat="server"> 
         <asp:ListItem>Rejected</asp:ListItem> 
         <asp:ListItem Text=<%= GetApprovedBy() %>></asp:ListItem> 

        </asp:DropDownList> 
       </EditItemTemplate> 

当我运行的页面,我得到

"Literal content ('<asp:ListItem Text=') is not allowed within a 'System.Web.UI.WebControls.ListItemCollection'." 

是否有实现这一目标的替代方式?最好没有DB。

在此先感谢!

编辑:我也曾尝试

< asp:ListItem><%= GetApprovedBy() %></asp:ListItem>

它失败,错误

回答

3

小心一点:当绑定(网格/列表/中继器)使用<%# %>,而不是<%= %>

这里的@adrianos说什么一个例子:(!VB aaagghhh我的眼睛T_T)

Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim ddl As DropDownList = CType(e.Row.FindControl("ApprovalEdit"), DropDownList) 
     ' and then do the binding or add some items 

    End If 
End Sub 

+0

保留拒绝ListItem当数据绑定设置AppendDataBoundItems =“true”您宣布DropDownList。 – 2010-10-08 07:15:40

+0

+1代码示例! – adrianos 2010-10-08 08:15:37

2

您可以创建一个在GridView的RowDataBound事件中运行的方法“的代码块在这种情况下,不支持” 。

在该方法中,通过id搜索您的下拉列表。如果您找到它,请检查您的用户类型(经理/主管)并以编程方式添加相关的listItem。

0

我相信你想要的东西是这样的:

<% ddlRooms.Items.Clear(); 

         for (int i = 1; i <= 3; i++) 
         { 
          ddlRooms.Items.Add(new ListItem(i.ToString() , i.ToString())); 
         } 
        %> 
         <asp:DropDownList ID="ddlRoomsCountToBook" runat="server"> 
         </asp:DropDownList> 

这是我发现在视图的下拉列表中添加动态元素的方式。