tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataGrid削除の質問の追加
記事No4120
投稿日: 2006/08/22(Tue) 15:02
投稿者松本
いつも大変、お世話になっております。

VB2005でDatagridを表示し、行をクリックしたら
その行を削除するプログラムを作成しています。

前回の質問で削除を簡単にするためにVB2005Expressに移行したのですが、
思惑通りに行きませんでした。

一番下の行から削除すると上手くいくのですが、
途中で削除すると、次の行の削除が全く出来ません、

エラーもでなく何も起こらないので困っております。

  HT = DataGrid1.HitTest(e.X, e.Y)
    'クリックされた場所の情報を取得
   If HT.Type = System.Windows.Forms.DataGrid.HitTestType.Cell Or HT.Type =     
    System.Windows.Forms.DataGrid.HitTestType.RowHeader Then
            
      '-- 選択行の削除
      Dim Dtset As DataSet = CType(DataGrid1.DataSource, DataSet)
      Dim DtTbl As DataTable = Dtset.Tables(DataGrid1.DataMember)
      DtTbl.Rows(HT.Row).Delete()

     End If

どなた様かお分かりになる方がいっらしゃいましたら
ご教授ねがえませんでしょうか。

[ツリー表示へ]
タイトルRe: DataGrid削除の質問の追加
記事No4121
投稿日: 2006/08/22(Tue) 15:38
投稿者花ちゃん
下記のような方法で削除できませんか?
Private Sub DataGridView1_MouseClick(ByVal sender As Object, _
            ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseClick
   Dim pos As System.Windows.Forms.DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y)
   If pos.Type = DataGrid.HitTestType.Cell Then
      Dim result As DialogResult
      result = MessageBox.Show(pos.RowIndex & "行目を削除してもよろしいですか?", _
                                              "削除確認", MessageBoxButtons.YesNo)
      If result = Windows.Forms.DialogResult.Yes Then
         DataGridView1.Rows.Remove(DataGridView1.Rows(pos.RowIndex))
      End If
   End If
End Sub

[ツリー表示へ]
タイトルRe^2: DataGrid削除の質問の追加
記事No4122
投稿日: 2006/08/22(Tue) 16:04
投稿者松本
早速の回答、誠に有難うございます。

ご提示頂いたソースをそのままペーストしようと考えたのですが、
DataGrid1はフォームにあるのですが、DataGridView1というものは
ありませんが、どのように関連しているのでしょうか?

きっとすごく初心者の質問だと恐る恐るの質問をお許し下さい。

[ツリー表示へ]
タイトルRe^3: DataGrid削除の質問の追加
記事No4123
投稿日: 2006/08/22(Tue) 16:14
投稿者るしぇ
> DataGrid1はフォームにあるのですが、DataGridView1というものは
> ありませんが、どのように関連しているのでしょうか?
前のスレッドで DataGridView の方を薦められてVB2005にしたんじゃ?

# DataGrid 使うならVB.NET2003と操作は変わらないよ?

[ツリー表示へ]
タイトルRe^4: DataGrid削除の質問の追加
記事No4125
投稿日: 2006/08/22(Tue) 16:29
投稿者松本
すみません。
勘違いしていました。

DatagridViewってDataGridのメソッドとか(何て言ったらいいか分からないのですが)
そういうものと思っていました。コントロールだったのですね!
初心者過ぎてとても恥ずかしいです。

2003のときにかなりの量のコーディングを済ませてしまい、
そのまま2005にコンバートしたので、DataGridで行うしかなさそうです。

DataGridのままで削除を上手くいく方法をご教授願えませんでしょうか。

現在は途中行を削除するとそれ以降の行の削除が全く出来ません。

Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.M
ouseEventArgs) Handles DataGrid1.MouseDown

Dim HT As System.Windows.Forms.DataGrid.HitTestInfo

HT = DataGrid1.HitTest(e.X, e.Y)
  'クリックされた場所の情報を取得
   If HT.Type = System.Windows.Forms.DataGrid.HitTestType.Cell Or HT.Type =     
    System.Windows.Forms.DataGrid.HitTestType.RowHeader Then

'-- 選択行の削除
Dim Dtset As DataSet = CType(DataGrid1.DataSource, DataSet)
Dim DtTbl As DataTable = Dtset.Tables(DataGrid1.DataMember)
DtTbl.Rows(HT.Row).Delete()

End If

お忙しい中とは存じますが何卒、お願い申し上げます。

[ツリー表示へ]
タイトルRe^5: DataGrid削除の質問の追加
記事No4127
投稿日: 2006/08/22(Tue) 17:20
投稿者花ちゃん
> DataGridのままで削除を上手くいく方法をご教授願えませんでしょうか。

DataGrid に拘るなら、No.4105 で回答したはずですが?
1.1行選択状態にして、DELキー を送れば削除できます。
2.元のデータの方で1行削除して再読込をする
等の方法を取られているようです。

[ツリー表示へ]
タイトルRe^5: DataGrid削除の質問の追加
記事No4130
投稿日: 2006/08/22(Tue) 19:22
投稿者花ちゃん
下記で一応列ヘッダーをクリックするとその行が削除されます。
DataGrid1.ReadOnly = True になっているなら事前に False に設定しておいて下さい

Private Sub DataGrid1_Click(ByVal sender As Object, _
                            ByVal e As System.EventArgs) Handles DataGrid1.Click
  System.Windows.Forms.SendKeys.Send("^{DEL}")
End Sub

[ツリー表示へ]
タイトルRe^6: DataGrid削除の質問の追加
記事No4131
投稿日: 2006/08/23(Wed) 08:43
投稿者松本
有難うございます。

私の勘違いで大変お手数をお掛けし深くお詫び申し上げます。

お教え頂いた通りに行いましたら、

正しい動作を致しました。

誠に有難うございます。

[ツリー表示へ]