在 gridview 中填充下拉列表

populate dropdown inside of gridview

我希望有人能帮助我。我有一个 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。

在此先感谢您的帮助。

我想我会 post 完整的解决方案供任何感兴趣的人使用。

<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

您想将对 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