ユーザーが別のデータグリッドでアイテムを選択するたびに動的に作成される DataGrid があります。最後のステップが 1 つ欠けているため、8 時間の頭痛の種になりました。ボタンが押されたときにすべての行を読み取る必要があります。基本的に、ユーザーがボタンを押すと、プログラムは各行の値 (productID または Name [この場合は一意]) を読み取り、それに「1」の値を割り当て、データベースに情報を挿入し、各行でプロセスを繰り返す必要があります。私はここまで来ました:
Protected Sub btnProcess_Click(sender As Object, e As EventArgs) Handles btnProcesss.Click
For Each GridViewRow In GridView2.Rows
'EmptySpace
Next
End Sub
以上です。ループが正しくあることはわかっていますが (右ですか?)、たとえば次のコードを使用できないため、何を追加すればよいかわかりません。
Dim findrow = e.Row.Cell(cellIndex).FindControl("ControlID")
e.Rowでエラーが発生するので。続行する方法についての助けをいただければ幸いです:)。
編集: SelectedIndexChanged の下に列を生成するためのコード...
If GridView2.Rows.Count = 0 Then
' dt = New DataTable()
dt.Columns.Add(New DataColumn("Name", GetType(System.String)))
dt.Columns.Add(New DataColumn("Price", GetType(System.String)))
Else
dt = DirectCast(Session("DataTable"), DataTable)
End If
コード全体を追加しました...
Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GridView1.SelectedIndexChanged
.
Dim row = GridView1.SelectedRow
If Not row Is Nothing AndAlso IsNumeric(row.Cells(3).Text) Then
Dim Price As Double = CDbl(row.Cells(3).Text)
Dim Name As String = CStr(row.Cells(2).Text)
If GridView2.Rows.Count = 0 Then
' dt = New DataTable()
dt.Columns.Add(New DataColumn("Name", GetType(System.String)))
dt.Columns.Add(New DataColumn("Price", GetType(System.String)))
Else
dt = DirectCast(Session("DataTable"), DataTable)
End If
Session("DataTable") = dt
Dim dr1 As DataRow = dt.NewRow()
dr1(0) = Name.ToString
dr1(1) = CDbl(Price.ToString)
dt.Rows.Add(dr1)
GridView2.DataSource = dt
GridView2.DataBind()
End If
サブ終了
更新されたボタン ハンドラー
Protected Sub btnProcess_Click(sender As Object, e As EventArgs) Handles btnProcess.Click
For Each row As GridViewRow In GridView2.Rows
Dim str As String = TryCast(row.FindControl("Name"), Label).Text
'For testing purposes a MsgBox
MsgBox(str)
Next