DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridでの任意行を削除する方法について

環境/言語:[VB.NET]
分類:[.NET]

[OS]Windows2000
[環境]VisualBasic.NET


こんにちは。
csvから読み込んだデータをフォーム上にデータグリッドでカンマ区切にセルで
表示させ、[削除]ボタンを押した時にフォーカスが当たっている行を
削除出来るような機能を作成しています。

フォーカスの当たっている行、列、セルの中身は取得出来るのですが削除する
行為で行き詰まってしまいました。過去履歴等から列を削除する方法等はTipsにて
拝見したのですが、行を削除する方法をご存知の方がいましたらお知恵を御貸し下さい。
関連するであろうコードの一部を参考までに記載しておきます。

***** csv取り込みのコード *****
'** csv取り込み中のフォーム表示
Dim opnFile As FrmLoad
opnFile = New FrmLoad

With opnFile
'** 表示
opnFile.Show()
opnFile.Refresh()

'** ファイルa^パス取得
FileNo = FreeFile()
csvFileName = OfdReadFile.FileName

'** ファイルオープン
FileOpen(FileNo, csvFileName, OpenMode.Input)
'** eofまで読み込み
LineCnt = 0
ItemCnt = 0
Do Until EOF(FileNo)
'** データ設定
With cpyCsv
Input(FileNo, .strcBcd)
Input(FileNo, .strcCcd)
Input(FileNo, .strcCnt)
Input(FileNo, .strcDate)
End With

dr = dt.NewRow

'** ファイルの内容を構造体に保存
With cpyCsv
dr("物品コード") = .strcBcd
dr("センタコード") = .strcCcd
dr("数量") = .strcCnt
dr("納期") = .strcDate
End With

dt.Rows.Add(dr)
Loop

dgCsv.DataSource = dt

'** ファイルクローズ
FileClose(FileNo)

'** 閉じる
opnFile.Close()

'** 破棄
opnFile.Dispose()
End With


***** フォーカスの当たっているセル情報を取得するコード *****
Dim c As DataGridCell = dgCsv.CurrentCell
'** セルの情報を表示
Dim rn As Integer = c.RowNumber
Console.WriteLine("選択されているセルの行:{0}", rn)
Dim cn As Integer = c.ColumnNumber
Console.WriteLine("選択されているセルの列:{0}", cn)
Console.WriteLine("選択されているセルの値:{0}", CStr(dgCsv(rn, cn)))
[削除]ボタン押下による削除では無いのですが、行ヘッダを表示させてキーボードの
[DEL]キーを押すことによって行を削除する行為は実現しています。


** csv読み込み後に以下の命令で行ヘッダを表示することで行削除可能とする **
 DataGrid1.RowHeadersVisible = True
こんばんわ。初めまして。
こんな感じでしょうか?

処理内容は削除ボタン(btnRowDelete)をクリックした時、
データグリッド(dgdMain)の選択行(CurrentRowIndex)と
DataSet変数(dstMain)のテーブル内の行(ROW)と
同じ行の値を削除して、再びバインドしています。
---------------------------------------------
Dim dstMain As New DataSet()

'選択行(列)削除
Private Sub btnRowDelete_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnRowDelete.Click

Me.lblMsg.Text = ""
'選択されているか
If Me.dgdMain.CurrentRowIndex.Equals(-1) Then
Me.lblMsg.Text = "選択されていないので削除できません。"
Exit Sub
End If

'選択されている行の値でデータセット内のテーブル行削除
dstMain.Tables(0).Rows(Me.dgdMain.CurrentRowIndex).Delete()
'データグリッドに再表示
Me.dgdMain.SetDataBinding(dstMain, dstMain.Tables(0).TableName)

End Sub
お返事ありがとうございます。
早速試して、結果をリターンしておきます。

またこのコードを活用して、
[追加]ボタンを押すことによってデータグリッドに
新しい入力行を追加する機能にも挑戦したいと思います。

>
解決済み!
コードが添付落ちしていました。すいません。
@行削除の例
'** 行削除許可
dv.AllowDelete = True
'** 行削除
dt.Rows.Remove(dr)
'** 行削除禁止
dv.AllowDelete = False
A新規行追加時の例
'** 新規行追加許可
dv.AllowNew = True
'** 新規行作成
dr = dt.NewRow
'** 初期値設定
dr(Str_ColName(0)) = ""
'** 新規行追加
dt.Rows.Add(dr)
'** 新規行追加禁止
dv.AllowNew = False

※drはデータレコード、dvはデータビューです。
 データグリッドとヒモ付けています。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板