2017-06-16 17 views
0

私は誰かが私を助けることを望んでいます。私はグリッドビューを持っていて、各ラインにはドロップダウンがあります。私はラインのキー値の値に基づいてドロップダウンを入力したいと思います。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> 

そして、ここでドロップダウンを移入するコードです:私はrowIndexプロパティを取得する方法がわからないコードにコメントしたよう

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 

ありがとうございました。

私は、完成したソリューションを興味のある人に投稿すると思っていました。

<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 

答えて

0

あなたがそうのようなあなたのgvCart_RowDataBoundハンドラにしてgetUOM(rowIndexプロパティ)にお電話を移動したい:

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

Iこれを少し変更して、RowIndexの代わりに実際のuomを返すようにしました。そして、これは動作しますが、ページのライフサイクルは結果の途中でドロップダウンに移ります。私は、gvCart_RowDataBoundはページがレンダリングされる直前に発生するため、ドロップダウンは空のイベントに戻ります。 – RedDogsRock

+0

それらをバインドする必要があります。あなたの正確な要件はわかりませんが、最初にそれらを読み込んでポストバックを引き起こすアクションを実行する場合は、それらを再バインドする必要があります(グリッドを正しく再バインドしている場合は自動的に行われます) 。 – mjw

関連する問題