C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: DataGridView.CombBox列について


(過去ログ 63 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■36184 / inTopicNo.1)  DataGridView.CombBox列について
  
□投稿者/ jin (1回)-(2009/05/23(Sat) 15:28:52)

分類:[VB.NET/VB2005 以降] 

お世話になります。
現在VB2008にて、開発を行っているのですが、ComboBoxColumnを含むDataGridViewがあり、「1.2.3」の三つの数字をアイテムにしています。
そこで、三つの数字のうち、「2」を選択すると、選択した行の指定したCellの文字列を消し、Nullの状態にしたいんです。

まず、DataGridVoewのComboBoxColumnに対し、SelectedIndexChangedのイベントを補足しています。
こちらがそのソースです。
Privete Sub DataGridView_SelectedIndexChanged(Byal Sender 〜
	'ComboBoxのCellの値が変更された場合の処理。
	Dim roe As Integer
	Dim col As Integer
	Dim str As String = ""

	roe = DataGridView1.CurrentCell.RowIndex
	col = DataGridView1.CurrentCell.ColumnIndex
	
	'変更後の値を取得する。
	Try
	   str = Me.DataGridView1.CurrentCell.GetEditedFormttedValue(row, col)
	Catch ex As NullReferenceException
	End Try

	'ComboBoxの値が2に変更された場合の処理
	If str = 2 Then
	   '値の変更を確定する
	  Me.DataGridView1.EndEdit()
	   Division_Changed(str, row, col)
	End If
End Sub

という内容です。
ComboBoxの値が変更されたら、Division_Changeのイベントを行い、そこで選択された行のCellをNullにするという動作を行います。

Private Sub Division_Changed(ByVal str As String, ByVal row As Integer, ByVal col As Integer)
        'strの値が2であれば選択されている行のCellの値をNullにします。
     If str = 2 Then
	Me.DataGridView1.Rows(row).Cells(6).Value = ""
        Me.DataGridView1.Rows(row).Cells(7).Value = ""
	Me.DataGridView1.Rows(row).Cells(8).Value = ""
     End If
End Sub

という形です。
ここで皆さんにお聞きしたいことは、Division_ChangedのイベントでNullを指定しているのですが、なぜか値が変更されていないんです。
デバックをして確かめたりもしたのですが、エラーも出ず、問題なくDivision_Changedのイベントは通っています。
元々、NullにしようとしているCellには数値の値が格納されています。
そこで、Nullではなく、0を指定すると、問題なく値がすべて0となりました。
私は「""」で値を消すようにしているのですが、他に何か方法がありましたら、ご教授ください。
よろしくお願いします。


引用返信 編集キー/
■36185 / inTopicNo.2)  Re[1]: DataGridView.CombBox列について
□投稿者/ s2n (5回)-(2009/05/23(Sat) 15:38:33)
No36184 (jin さん) に返信
> ComboBoxの値が変更されたら、Division_Changeのイベントを行い、そこで選択された行のCellをNullにするという動作を行います。
> 
> Private Sub Division_Changed(ByVal str As String, ByVal row As Integer, ByVal col As Integer)
>         'strの値が2であれば選択されている行のCellの値をNullにします。
>      If str = 2 Then
> 	Me.DataGridView1.Rows(row).Cells(6).Value = ""
>         Me.DataGridView1.Rows(row).Cells(7).Value = ""
> 	Me.DataGridView1.Rows(row).Cells(8).Value = ""
>      End If
> End Sub
> という形です。
> ここで皆さんにお聞きしたいことは、Division_ChangedのイベントでNullを指定しているのですが、なぜか値が変更されていないんです。
> デバックをして確かめたりもしたのですが、エラーも出ず、問題なくDivision_Changedのイベントは通っています。
> 元々、NullにしようとしているCellには数値の値が格納されています。
> そこで、Nullではなく、0を指定すると、問題なく値がすべて0となりました。
> 私は「""」で値を消すようにしているのですが、他に何か方法がありましたら、ご教授ください。
> よろしくお願いします。

""(空文字)とNullは同じではないです。
あと、VBだとNullはNothingだったと思います。

引用返信 編集キー/
■36187 / inTopicNo.3)  Re[2]: DataGridView.CombBox列について
□投稿者/ jin (2回)-(2009/05/23(Sat) 16:29:15)
No36185 (s2n さん) に返信
> ""(空文字)とNullは同じではないです。
> あと、VBだとNullはNothingだったと思います。

回答ありがとうございます。

Me.DataGridView1.Rows(row).Cells(7).Value = ""
Me.DataGridView1.Rows(row).Cells(8).Value = ""
の部分を
     Me.DataGridView1.Rows(row).Cells(7).Value Is Nothing
Me.DataGridView1.Rows(row).Cells(8).Value Is Nothing
という形でしょうか?

すみません、只今試せる環境ではないんです・・・。

引用返信 編集キー/
■36188 / inTopicNo.4)  Re[3]: DataGridView.CombBox列について
□投稿者/ s2n (6回)-(2009/05/23(Sat) 17:11:10)
No36187 (jin さん) に返信
>       Me.DataGridView1.Rows(row).Cells(7).Value = ""
> 	Me.DataGridView1.Rows(row).Cells(8).Value = ""
> の部分を
>    Me.DataGridView1.Rows(row).Cells(7).Value Is Nothing
> 	Me.DataGridView1.Rows(row).Cells(8).Value Is Nothing
> という形でしょうか?
Is Nothing はIF文で該当変数がNull値(Nothing)か判定する際に使うものです。

単純に値を設定すればいいです。
Me.DataGridView1.Rows(row).Cells(7).Value = Nothing
Me.DataGridView1.Rows(row).Cells(8).Value = Nothing

引用返信 編集キー/
■36190 / inTopicNo.5)  Re[4]: DataGridView.CombBox列について
□投稿者/ jin (3回)-(2009/05/23(Sat) 17:45:41)
2009/05/23(Sat) 17:46:09 編集(投稿者)
2009/05/23(Sat) 17:46:02 編集(投稿者)

No36188 (s2n さん) に返信
> 単純に値を設定すればいいです。
> Me.DataGridView1.Rows(row).Cells(7).Value = Nothing
> Me.DataGridView1.Rows(row).Cells(8).Value = Nothing

わかりました。Nullと""の扱いを同じものと考えていましたが、正しく理解することができました。
この形で試してみようと思います。

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -