グリッドビュー行のボタンから行コマンド イベントを実行すると、イベント行にある任意のフィールドから正しい値を検出できます。
hidID
これは一意の識別子であり、期待どおりに各行を正しく報告します。ddlVal
現在選択されている値ではなく、常にリストの最初の項目を報告します。コマンドイベントを使用しているときにドロップダウンリストが現在選択されている値を検出しない理由について、誰かが説明できますか?
ASP.NET
<asp:GridView ID="gv" runat="Server" AutoGenerateColumns="False" OnRowCommand="gv_RowCommand" EnableModelValidation="False">
<Columns>
<asp:TemplateField HeaderText="Reason Missed" ItemStyle-CssClass="Inline" HeaderStyle-CssClass="NoSort" Visible="false">
<ItemTemplate>
<asp:DropDownList ID="ddl" runat="server" DataSourceID="sqldatasource" DataValueField="ID" DataTextField="Text" AppendDataBoundItems="true">
<asp:ListItem Text="Select ..." Value="0"/>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="sqldatasource" runat="Server" SelectCommand="sp" SelectCommandType="StoredProcedure"/>
VB
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim constring = ConfigurationManager.ConnectionStrings("Con").ConnectionString
sqldatasource.ConnectionString = constring
Bind_gv()
End Sub
Protected Sub gv_RowCommand(sender As Object, e As GridViewCommandEventArgs)
Dim rowIndex As Integer = Convert.ToInt32(e.CommandArgument)
Dim row As GridViewRow = gv.Rows(rowIndex)
Dim ddlVal As Integer = DirectCast(row.FindControl("ddl"), DropDownList).SelectedValue
Dim hidID As Integer = DirectCast(row.FindControl("hidID"), HiddenField).Value
'ETC ...
End Sub