我想在下拉列表中显示不同的值,同时编辑gridview,具体取决于登录的用户。例如......
该官员将看到“官员批准”状态。 导演会看到“导演批准”状态
我正在尝试以编程方式将这些添加到我在gridview(approvalsGrid)的编辑模板中的下拉列表中。这是我的代码:
Protected Sub ApprovalsGrid_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles ApprovalsGrid.RowUpdating
Dim ApprovalEditDD As DropDownList = CType(ApprovalsGrid.Rows(ApprovalsGrid.EditIndex).FindControl("ApprovalEdit"), DropDownList)
If User.Identity.Name = "officer" Then
ApprovalEditDD.Items.Add("Approved by Officer")
End If
End Sub
我没有收到任何错误。但是没有物品就得到一个空的下拉列表。我使用的是正确的活动吗?
答案 0 :(得分:2)
为什么不试试这个
<script runat=server>
string GetApprovedBy()
{
if (User.Identity.Name == "officer")
{
return "Approved by Officer";
}
else if(User.Identity.Name == "some other name")
{
return "something else";
}
else return string.Empty;
}
</script>
<asp:GridView runat="server">
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:DropDownList runat="server">
<asp:ListItem Text='<%= GetApprovedBy() %>' />
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
当然,如果每个用户类型都有一个关联的下拉项,这当然有效。这符合您的需求吗?
答案 1 :(得分:1)
尝试事件:ApprovalsGrid_RowEditing而不是ApprovalsGrid_RowUpdating。 GridView事件RowUpdating在用户将更新提交到数据源时触发,但在实际发生这些更新之前(RowUpdated在更新发生后触发)。当GridView进入编辑模式时,RowEditing会触发,这似乎是尝试绑定下拉列表的正确位置。仍然要小心PostBacks和类似的东西,以确保列表中的选项保持在那里,因为我还没有设置整个过程来尝试它。
此处还有一个MSDN link,它解释了所有不同的GridView事件(其中有很多)。