【问题标题】:populate dropdown inside of gridview在gridview中填充下拉列表
【发布时间】:2017-06-16 14:40:05
【问题描述】:

我希望有人可以帮助我。我有一个gridview,其中每一行都有一个下拉列表。我希望根据行键值的值填充下拉列表。

<asp:GridView ID="gvCart" runat="server" CssClass="table table-striped" DataKeyNames="UOMSCHDL" OnRowDataBound="gvCart_RowDataBound"
    SelectMethod="gvCart_GetData" AutoGenerateColumns="false" DeleteMethod="gvCart_DeleteItem" AutoGenerateDeleteButton="true">
    <Columns>
        <asp:TemplateField>
            <HeaderTemplate>Item #</HeaderTemplate>
            <ItemTemplate>
                <%#Eval("ITEMNMBR")%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField>
            <HeaderTemplate>UOM</HeaderTemplate>
            <ItemTemplate>
                <asp:DropDownList ID="ddlUOM" runat="server"AutoPostBack="true" SelectMethod="getUOM" CssClass="dropdown-toggle"
                                            DataTextField="UOFM" DataValueField="UOFM" AppendDataBoundItems="true">
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

这是填充下拉列表的代码:

Public Function getUOM() As IEnumerable
    'the following code has a red sqiggly under RowIndex because it isn't 
    'declared. I get that, but what do I use to get the RowIndex

    Dim uom As String = gvCart.DataKeys(RowIndex).Value.ToString()

    'this query works if I "hardcode" the where to = "roll" but I want 
    ' it to be dynamic

    Dim query = From i In db.IV40202
                Where i.UOMSCHDL = uom ' "roll"
                Order By i.SEQNUMBR
    Return query.ToList()

End Function

正如我在代码中评论的那样,我不知道如何获取 RowIndex。

非常感谢您的帮助。

我想我会为任何感兴趣的人发布完整的解决方案。

<asp:TemplateField>
    <HeaderTemplate>UOM</HeaderTemplate>
        <ItemTemplate>
            <asp:DropDownList ID="ddlUOM" runat="server" CssClass="dropdown-toggle"></asp:DropDownList>
         </ItemTemplate>

在后面的代码中:

 Public Function getUOM(uom As String) As IEnumerable
    Dim myUOM As String = Trim(uom)
    'ultimately this needs to be based on the uomschdl of each item
    Dim query = From i In db.IV40202
                Where i.UOMSCHDL = myUOM ' "roll"
                Order By i.SEQNUMBR
                Select New With {
                    .UOFM = i.UOFM
                    }
    Return query.ToList()

End Function

Protected Sub gvCart_RowDataBound(sender As Object, e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim uom As String = gvCart.DataKeys(e.Row.RowIndex).Value.ToString()
        Dim ddlUOM As DropDownList = TryCast(e.Row.FindControl("ddlUOM"), DropDownList)
        ddlUOM.DataSource = getUOM(uom)
        ddlUOM.DataTextField = "UOFM"
        ddlUOM.DataValueField = "UOFM"
        ddlUOM.DataBind()
    End If
End Sub

【问题讨论】:

    标签: asp.net gridview model-binding dropdown


    【解决方案1】:

    您希望将您对 getUOM(rowIndex) 的调用移动到您的 gvCart_RowDataBound 处理程序中,如下所示:

    protected Sub gvCart_RowDataBound(Dim sender As Object, Dim e As GridViewRowEventArgs)
        Dim rowIndex As Int = e.Row.RowIndex
        getUOM(rowIndex)        
    End Sub
    

    【讨论】:

    • 我稍微改变了一下,让它发回实际的 uom 而不是 RowIndex。这很有效,除了现在页面生命周期妨碍了填充下拉列表的结果。我认为因为 gvCart_RowDataBound 发生在页面呈现之前,所以下拉列表返回为空,即使它们之前已填充。
    • 你需要绑定它们。我不确定您的确切要求,但如果您最初加载它们,然后执行一些导致回发的操作,您需要再次重新绑定它们(如果您正确重新绑定网格,这应该会自动发生) .
    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多