2010-10-08 112 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> 

這是我發現在視圖的下拉列表中添加動態元素的方式。