0

asp.netを使用して、ドロップダウンリストを含む列をグリッドビューに入力しようとしています.

これまでのところ、ドロップダウンリストに SQL テーブルのすべてのオプションを設定できます。また、SQL テーブルから選択した値を保存して読み取ることもできますが、最後の行は無視しているように見えます。

私のコードは次のとおりです。

Protected Sub gridGenerators_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gridGenerators.RowDataBound

    With e.Row
        If e.Row.RowType = DataControlRowType.DataRow Then

            'Populate all dropdown lists with options from SQL'
            Dim ddl = TryCast(.Cells(0).FindControl("ddlOnCallGroup"), DropDownList)

            ddl.DataSource = db.getSMSgroups()
            ddl.DataTextField = "SMS_Group"
            ddl.DataValueField = "id"
            ddl.DataBind()

            'And add a default when value is NULL'
            Dim l1 As New ListItem

            l1.Text = "-select-"
            l1.Value = ""

            ddl.Items.Add(l1)

            'Get the current setting from SQL (that user has permissions for)'
            Dim generators As String = Membership.GetUser().Comment
            Dim genDT As DataTable = db.locations(generators.Split(",".ToCharArray))

            'Iterate through settings and select value for each dropdownlist'
            For Each grdrow As GridViewRow In gridGenerators.Rows

                Dim drdList = TryCast(gridGenerators.Rows(grdrow.RowIndex).Cells(0).FindControl("ddlOnCallGroup"), DropDownList)

                drdList.SelectedValue = genDT.Rows(grdrow.RowIndex).Item("ID_SMS_Group").ToString

            Next

        End If
    End With

End Sub

前もって感謝します!!!

4

1 に答える 1

4

とにかくfor every が呼び出されるすべてGridViewRowsをループするのはなぜですか?RowDataBoundGridViewRow

したがって、このループの代わりに:

For Each grdrow As GridViewRow In gridGenerators.Rows

    Dim drdList = TryCast(gridGenerators.Rows(grdrow.RowIndex).Cells(0).FindControl("ddlOnCallGroup"), DropDownList)
    drdList.SelectedValue = genDT.Rows(grdrow.RowIndex).Item("ID_SMS_Group").ToString

Next

これだけ:

Dim drdList = DirectCast(e.Row.FindControl("ddlOnCallGroup"), DropDownList)
drdList.SelectedValue = DirectCast(e.Row.DataItem, DataRowView).Item("ID_SMS_Group").ToString

他にもいくつか変更したことに注意してください(へのアクセスDataItemFindControlonの使用など)e.Row)

于 2012-11-23T09:57:07.010 に答える