使用哪个gridview事件将项目添加到编辑模板中使用的下拉列表中?

时间:2010-10-07 13:51:33

标签: asp.net vb.net events gridview drop-down-menu

我想在下拉列表中显示不同的值,同时编辑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

我没有收到任何错误。但是没有物品就得到一个空的下拉列表。我使用的是正确的活动吗?

2 个答案:

答案 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事件(其中有很多)。