|
分類:[.NET 全般]
いつもお世話になっております。 GridView で使用しているDataTableからのデータ削除(Remove)がうまくいかず、苦心しております。 お手数ですが、どなたかお知恵をお貸しいただけますでしょうか?
GridView1・GridView2があり、2つは全く同じレイアウトです。 どちらも先頭に、行選択用のチェックボックス項目があります。 以下の仕様なのですが、4の削除処理を行うと、GridView2だけでなくGridView1のデータまで削除されてしまいます。 (正確には、GridView1にバインドしているDataTable、およびセッションから行削除されてしまいます)
1[検索]ボタン押下→テーブル検索し結果をGridView1に表示、セッションにも保存 2[一括追加]ボタン押下→GridView1からGridView2に全行コピー 3[一括削除]ボタン押下→GridView2のデータを全削除(Nothing) 4[削除]ボタン押下→GridView2のチェックボックスで選択された行を削除 5[追加]ボタン押下→GridView1のチェックボックスで選択された行をGridView2に追加
たとえば、GridView2から2件選択して削除ボタン押下した場合:
デバッグ@の結果例: 削除前tblGridView1の件数:5 削除前tblGridView2の件数:5
デバッグAの結果例: 削除前tblGridView1の件数:3 ←なぜか削除されている。NG 削除前tblGridView2の件数:3 ←2件削除されている。OK
'================================================================================ '検索ボタン押下 '================================================================================ Protected Sub BtnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnSearch.Click
Dim tblGridView1 As DataTable = Nothing
'テーブルを検索し結果をデータテーブルにセット tblGridView1 = GetDataTable()
'GridViewに表示 Me.GridView1.DataSource = tblGridView1 Me.GridView1.PageIndex = 0 Me.GridView1.DataBind()
'検索結果をセッションに保持 Session.Remove("Session_tblGridView1") Session.Add("Session_tblGridView1", tblGridView1)
End Sub
'================================================================================ '削除ボタン押下時 '================================================================================ Protected Sub BtnDel_Click(sender As Object, e As EventArgs) Handles BtnDel.Click
Dim i As Integer = 0 Dim strDenpyoNo As String = String.Empty Dim strFilter As String = String.Empty
Dim tblGridView1 As DataTable = CType(Session("Session_tblGridView1"), DataTable) Dim tblGridView2 As DataTable = CType(Session("Session_tblGridView2"), DataTable)
If Session("Session_tblGridView2") IsNot Nothing Then
'デバッグ@ Debug.WriteLine("削除前tblGridView1の件数:" & tblGridView1.Rows.Count) Debug.WriteLine("削除前tblGridView2の件数:" & tblGridView2.Rows.Count)
'GridViewで選択された行をtblGridView2から削除 For Each r As GridViewRow In GridView2.Rows If CType(r.FindControl("CbSelect"), CheckBox).Checked Then strDenpyoNo = CType(r.FindControl("LblDenban"), Label).Text strFilter = "DENPYO_NO = " & strDenpyoNo Debug.WriteLine(strFilter)
'tblGridView2からデータ削除 For Each dr As DataRow In tblGridView2.Select(strFilter) tblGridView2.Rows.Remove(dr) Next
End If Next
'GridView2に反映 Me.GridView2.DataSource = tblGridView2 Me.GridView2.PageIndex = 0 Me.GridView2.DataBind()
'検索結果をセッションに保持 Session.Remove("Session_tblGridView2") Session.Add("Session_tblGridView2", tblGridView2)
'デバッグA Debug.WriteLine("削除後tblGridView1の件数:" & tblGridView1.Rows.Count) Debug.WriteLine("削除後tblGridView2の件数:" & tblGridView2.Rows.Count)
End If
End Sub
|