none
DataGridViewに設置したコンボボックスの表示内容を消すには? RRS feed

  • 質問

  •  Form_Load時に、DataGridview1(明細部)用に、dataTableを作成しています。
     このdataTableを、dtDgv とします。     Me.DataGridView1.DataSource = dtDgv

      この中(dtDgv)には、Design_ID(数値型), DesignNo(文字型), TagName(文字型:デザイン名のこと)が含まれています。
     この三項目は、相互に関連したデータです。Design_IDが主キー。

            'DataGridView(明細部)にコンボボックスを設定。--- Form_Loadのコード内に置く(Me.DataGridView1.DataSource = dtDgvのコードの後に、以下を書く)。

            Dim CB_DesignName As New DataGridViewComboBoxColumn
            Me.DataGridView1.Columns.Add(CB_DesignName)
            CB_DesignName.DataSource = dt_Item22     'dt_Item22:コンボボックスのdatatable(datasource)用に、作成したもの(コード省略)。
            CB_DesignName.HeaderText = "デザイン"
            CB_DesignName.ValueMember = "Design_ID"
            CB_DesignName.DisplayMember = "TagName"
            CB_DesignName.Name = "CB_DesignName"
            CB_DesignName.FlatStyle = FlatStyle.Popup
            CB_DesignName.DisplayStyleForCurrentCellOnly = True  'クリック後にコンボ表示! それまでは、表示しない。
        
           
            Me.DataGridView1.Columns("CB_DesignName").DataPropertyName = dtDgv.Columns("Design_ID").ColumnName ---(A)

        明細部のCellには、追加作成した「CB_DesignName」のほかに、関連Cellとして「DesignNo」があります。
        これで、フォームを開いたとき、明細部のコンボボックス(CB_DesignName)に、該当データは正常に表示されます。
        (A)の、おかげです。

    DataGridView.CellEndEdit内に、コンボ(CB_DesignName)を操作するとコンボ表示は変わり、それに応じてDesignNo(textBoxタイプ)も表示するようにコーを書いています。

    DesignNoを変更すると、コンボ表示(CB_DesignName)も、これに対応して表示するようにしています。

     ここまでは、順調です。

    以下は、<参考コード>:

    Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit

     '-----略

        Dim dgv As DataGridView = CType(sender, DataGridView)

                Dim St As String
                Dim Con As New System.Data.SqlClient.SqlConnection
                Dim SQL As System.Data.SqlClient.SqlCommand
                Dim ServerName As String = GC_SVRName   'サーバー名(またはIPアドレス)
                Dim UserID As String = GC_UserID      'ユーザーID
                Dim Password As String = GC_Password   'パスワード
                Dim DatabaseName As String = GC_DatabaseName
                St = "Server=" & ServerName & ";"
                St &= "User ID=" & UserID & ";"
                St &= "Password=" & Password & ";"
                St &= "Initial Catalog=" & DatabaseName
                Con.ConnectionString = St
                SQL = Con.CreateCommand
                Con.Open()
                Dim adapter = New SqlClient.SqlDataAdapter()

                '(明細行:Datagridview1)変更時
                If dgv.Columns(e.ColumnIndex).Name = "DesignNo" Then   'デザイン番号入力変更時
                    GoTo A
              ’----略----
                Else
                    Con.Close()
                    SQL.Dispose()
                    adapter.Dispose()
                    Con.Dispose()
                 End If

    A:
     If dgv.Columns(e.ColumnIndex).Name = "DesignNo" AndAlso Not IsDBNull(Me.DataGridView1.CurrentRow.Cells("DesignNo").Value) Then
                    '---略---

                    Dim ds_Item0 = New DataSet
                    Dim dt_Item_DN As New DataTable
                    adapter.SelectCommand = SQL
                    Dim sb As New System.Text.StringBuilder
                    sb.Append("SELECT T_ItemStock.ItemNo")
                     ’---略---
                    sb.Append(" , T_ItemStock.Design_ID")
                    sb.Append(" , T_M_Design.DesignNo")
                    sb.Append(" , T_M_Design.TagName")
                    ’----略---
                    sb.Append(" FROM T_ItemStock inner join T_M_Design on T_M_Design.Design_ID=T_ItemStock.Design_ID")
                    sb.Append(" WHERE T_M_Design.DesignNo= '" & DN & "'")  ’注:DN=DesignNo
                    SQL.CommandText = sb.ToString()
                    'adapter.SelectCommand = SQL
                    adapter.Fill(ds_Item_DN)
                    dt_Item_DN = ds_Item0.Tables(0)   'DesignNoを指定したときのdatatable(関連データ:Design_ID含む。)

                   'DesignNoの関連データ表示
                    If dt_Item_DN.Rows.Count > 0 Then    'DesignNoでの該当データ存在時
                        '----略
                        Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = dt_Item_DN.Rows(0).Item("Design_ID").ToString
                        '----略
                        dt_Item_DN.Dispose()
                        Con.Close()
                        SQL.Dispose()
                        adapter.Dispose()
                        Con.Dispose()
                     ElseIf dt_Item_DN.Rows.Count = 0 AndAlso Not IsDBNull(Me.DataGridView1.CurrentRow.Cells("DesignNo").Value) Then  ’DesignNoでの該当データが存在しない時
                        MsgBox("データが存在しません。")
                        Me.DataGridView1.CurrentRow.Cells("Volume").Value = 0   '重要:登録時、Volume=0の時は、この明細行はデータ登録しないで消去する。だから、以下の行は表示用に過ぎない。
                      
                       'この段階で、表示中のDataGridView1内のコンボボックス(CB_DesignName)を空白にしたいのですが、うまくいきません。
             ’空白でなくて他の表示でもいいのですが、成功していません。 
                     
              ’----略

                        dt_Item_DN.Dispose()
                        Con.Close()
                        SQL.Dispose()
                        adapter.Dispose()
                        Con.Dispose()
                        End If
                End If

        ’-------略

    End sub

    つまり、存在しないDesignNoを入力した場合に、CB_DesignNameの表示は消えてほしいのですが、残ったままで消えません!

    存在しないDesignNoを入力した場合に、DataGridView内に設定した「CB_DesignName」の表示を消す方法を教えてください。 「CB_DesignName」の表示が空白または、それとわかる表示にになればよいのです。

       ’参考コード ---不成功! 
                '存在しないDesignNoを入力した場合(dt_Item_DN.Rows.Count = 0) --  'dt_Item_DN:DesignNoを検索条件としたときのdatatable
                    If dt_Item_DN.Rows.Count = 0 AndAlso Not IsDBNull(Me.DataGridView1.CurrentRow.Cells("DesignNo").Value) Then
                        MsgBox("データが存在しません。")

                        '下記のコード(3行)でも、CB_DesignNameの表示は消えません。エラーになります。
                        Me.DataGridView1.CurrentRow.Cells("CB_DesignName").Value = Nothing
                        Me.DataGridView1.CurrentRow.Cells("CB_DesignName").Value =""
               Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = 0   ’これも、エラーになります。
              
             '(A)にあるように、DataGridViewのコンボボックスは、DataGridView1のDataSource(dtDgv)とつながっています。
             'つまり、dtDgvのDesign_IDと関連しています。エラー表示としては、”Design_ID”に、 Nullは許されないとあります。
             ’dt_Item_DN.Rows.Count = 0なのだから、DesignNoは、コンボ表示に必要な”Design_ID"を指定できません!

              ’また、下記コードを代わりに入れると、「エラー表示は出ません」が、コンボ表示は消えません、残ったままです。
                        'If IsDBNull(Me.DataGridView1.CurrentRow.Cells("Design_ID").Value) Then
                        'Me.DataGridView1.CurrentRow.Cells("CB_DesignName").Value = Nothing
                        'End If
                 EndIf


    存在しないDesignNo(DataGridView1内のCell)を入力したときには、コンボボックス(CB_DesignName)表示は、”空”にしないと意味がなくなります。

    解決策を、お教えください。(A)を、よくわかっていないのかもしれません。

    YKSaila





    • 編集済み yksaila 2014年9月6日 0:31
    2014年9月5日 10:35

回答

  • こんな

    Public Class Form1
        Private WithEvents DataGridView1 As System.Windows.Forms.DataGridView
    
        Sub New()
            InitializeComponent()
            Me.Controls.Clear()
    
            DataGridView1 = New DataGridView
            DataGridView1.Dock = DockStyle.Fill
            Me.Controls.Add(DataGridView1)
        End Sub
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim dtDgv As DataTable = CreateTable_DGV()
            Dim dt_Item22 As DataTable = CreateTable_Item22()
    
    
            Me.DataGridView1.AutoGenerateColumns = True
            Me.DataGridView1.DataSource = dtDgv
    
            Dim CB_DesignName As New DataGridViewComboBoxColumn
            Me.DataGridView1.Columns.Add(CB_DesignName)
            CB_DesignName.DataSource = dt_Item22
            CB_DesignName.HeaderText = "デザイン"
            CB_DesignName.ValueMember = "Design_ID"
            CB_DesignName.DisplayMember = "TagName"
            CB_DesignName.Name = "CB_DesignName"
            CB_DesignName.FlatStyle = FlatStyle.Popup
            CB_DesignName.DisplayStyleForCurrentCellOnly = True
    
            CB_DesignName.DataPropertyName = "Design_ID"
        End Sub
    
    
        Private Function CreateTable_Item22() As DataTable
            Dim dt_Item22 As New DataTable()
            Dim clmDID As DataColumn = dt_Item22.Columns.Add("Design_ID", GetType(Integer))
            Dim clmTag As DataColumn = dt_Item22.Columns.Add("TagName", GetType(String))
            dt_Item22.PrimaryKey = New DataColumn() {clmDID}
    
            Dim row As DataRow
            row = dt_Item22.NewRow() : row(0) = 1 : row(1) = "AAAA" : dt_Item22.Rows.Add(row)
            row = dt_Item22.NewRow() : row(0) = 2 : row(1) = "BBBB" : dt_Item22.Rows.Add(row)
            Return dt_Item22
        End Function
        Private Function CreateTable_DGV() As DataTable
            Dim dtDgv As New DataTable
            Dim ID As New DataColumn("ID", GetType(Integer))
            Dim clmID = dtDgv.Columns.Add("ID", GetType(Integer)) : clmID.AutoIncrement = True : dtDgv.PrimaryKey = New DataColumn() {clmID}
            Dim clmNo = dtDgv.Columns.Add("DesignNo", GetType(String))
    
            Dim clmDID = dtDgv.Columns.Add("Design_ID", GetType(Integer))
            'clmDID.AllowDBNull = False 'DBNullが入るようにしておく(デフォルトはTrue)
            clmDID.AllowDBNull = True '間違えてテスト中のコードを載せてい待っていたので訂正です
            'データセットデザイナで厳密な型のDataTableを作っている場合
            'データベース側でNULLを許容していなくても、DataTable側のこの列のAllowDBNullをtrueにしておくこと
            'DesignNoが見つから無い場合にはデータベースへ登録しないのならば、DataTableにDBNullが入っていても構わないはず
    
            Dim row As DataRow
            row = dtDgv.NewRow()
            row("DesignNo") = "A"
            row("Design_ID") = 1
            dtDgv.Rows.Add(row)
    
            Return dtDgv
        End Function
    
        Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            Dim dgv As DataGridView = CType(sender, DataGridView)
            If dgv.Columns(e.ColumnIndex).Name = "DesignNo" _
                AndAlso Not IsDBNull(Me.DataGridView1.CurrentRow.Cells("DesignNo").Value) Then
    
                'サーバーに読みに行くとかの処理は質問者以外には意味のない処理なのでDesignNoの入力文字によって代替する
                Dim designNo As String
                Dim row As DataGridViewRow = dgv.Rows(e.RowIndex)
                designNo = CType(row.Cells("DesignNo").Value, String)
                If (designNo = "A") Then
                    dgv.CurrentRow.Cells("Design_ID").Value = 1
                ElseIf (designNo = "B") Then
                    dgv.CurrentRow.Cells("Design_ID").Value = 2
                Else
                    dgv.CurrentRow.Cells("Design_ID").Value = DBNull.Value  'DBNullを入れると消える
                End If
    
                dgv.InvalidateRow(e.RowIndex) '行の表示を再表示させて新しい値を表示させる。
            End If
    
        End Sub
    End Class

    質問や返信を入力する時の入力場所の上にいくつかボタンが並んでします。その中に「コードブロックの挿入」というのがありますから、コードを貼り付けるときに使用すると見やすい状態で貼り付けできますよ。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク yksaila 2014年9月6日 0:51
    • 回答としてマークされていない yksaila 2014年9月6日 2:43
    • 編集済み gekkaMVP 2014年9月6日 3:13 AllowDBNull=False → AllowDBNull=True
    • 回答としてマーク yksaila 2014年9月6日 3:22
    2014年9月5日 17:56
  • gekka様

    数回の実験の末、下記のようにして解決しました。前回のコメントの通り、その他の追加コードなしで、うまくいきました。

    <最終的な解決策>
    (1)下記のコードで、DatagridViewセルのDBNull入力禁止解除。
    dtDgv.Columns("Design_ID").AllowDBNull = True   'DBNullが入るようにしておく(Falseでは、なかったです)。

    (2)以下で、CB_DesignNameの表示が消えます。
    Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = DBNull.Value

    上記の二点で解決しました。

    <参考コメント>
    If dt_Item_DN.Rows.Count = 0 AndAlso Not IsDBNull(Me.DataGridView1.CurrentRow.Cells("DesignNo").Value) Then
     '---略
      Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = DBNull.Value  ':(C)
    ’---略
    Endif

    (C)の個所に下記コードを入れても、今回は不成功でした(他の場面では、成功していますが)。
     'Me.DataGridView1.CurrentRow.Cells("CB_DesignName").Value = Nothing  
     'Me.DataGridView1.CurrentRow.Cells("CB_DesignName").Value = ""

    ちなみに、
    Me.DataGridView1.Columns("CB_DesignName").DataPropertyName = dtDgv.Columns("Design_ID").ColumnName
    としている場合は、下記二行はエラーになります(他の場面では、有効ですが)。

    Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = Nothing
    Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = 0

    =DBNull.Value としないといけないようです。


    基本的な考え方(方針)を示していただいた、”あの注釈”が非常にありがたかったです。
    あの注釈がなかったら、もっと苦労していたかもしれません。
    終わってみれば簡単なことなのに、知らないということ・未経験ということは、大変なことだと改めて考えさせられました。

    ありがとうございました。

    YKsaila

    • 回答としてマーク yksaila 2014年9月6日 4:14
    2014年9月6日 4:13

すべての返信

  • こんな

    Public Class Form1
        Private WithEvents DataGridView1 As System.Windows.Forms.DataGridView
    
        Sub New()
            InitializeComponent()
            Me.Controls.Clear()
    
            DataGridView1 = New DataGridView
            DataGridView1.Dock = DockStyle.Fill
            Me.Controls.Add(DataGridView1)
        End Sub
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim dtDgv As DataTable = CreateTable_DGV()
            Dim dt_Item22 As DataTable = CreateTable_Item22()
    
    
            Me.DataGridView1.AutoGenerateColumns = True
            Me.DataGridView1.DataSource = dtDgv
    
            Dim CB_DesignName As New DataGridViewComboBoxColumn
            Me.DataGridView1.Columns.Add(CB_DesignName)
            CB_DesignName.DataSource = dt_Item22
            CB_DesignName.HeaderText = "デザイン"
            CB_DesignName.ValueMember = "Design_ID"
            CB_DesignName.DisplayMember = "TagName"
            CB_DesignName.Name = "CB_DesignName"
            CB_DesignName.FlatStyle = FlatStyle.Popup
            CB_DesignName.DisplayStyleForCurrentCellOnly = True
    
            CB_DesignName.DataPropertyName = "Design_ID"
        End Sub
    
    
        Private Function CreateTable_Item22() As DataTable
            Dim dt_Item22 As New DataTable()
            Dim clmDID As DataColumn = dt_Item22.Columns.Add("Design_ID", GetType(Integer))
            Dim clmTag As DataColumn = dt_Item22.Columns.Add("TagName", GetType(String))
            dt_Item22.PrimaryKey = New DataColumn() {clmDID}
    
            Dim row As DataRow
            row = dt_Item22.NewRow() : row(0) = 1 : row(1) = "AAAA" : dt_Item22.Rows.Add(row)
            row = dt_Item22.NewRow() : row(0) = 2 : row(1) = "BBBB" : dt_Item22.Rows.Add(row)
            Return dt_Item22
        End Function
        Private Function CreateTable_DGV() As DataTable
            Dim dtDgv As New DataTable
            Dim ID As New DataColumn("ID", GetType(Integer))
            Dim clmID = dtDgv.Columns.Add("ID", GetType(Integer)) : clmID.AutoIncrement = True : dtDgv.PrimaryKey = New DataColumn() {clmID}
            Dim clmNo = dtDgv.Columns.Add("DesignNo", GetType(String))
    
            Dim clmDID = dtDgv.Columns.Add("Design_ID", GetType(Integer))
            'clmDID.AllowDBNull = False 'DBNullが入るようにしておく(デフォルトはTrue)
            clmDID.AllowDBNull = True '間違えてテスト中のコードを載せてい待っていたので訂正です
            'データセットデザイナで厳密な型のDataTableを作っている場合
            'データベース側でNULLを許容していなくても、DataTable側のこの列のAllowDBNullをtrueにしておくこと
            'DesignNoが見つから無い場合にはデータベースへ登録しないのならば、DataTableにDBNullが入っていても構わないはず
    
            Dim row As DataRow
            row = dtDgv.NewRow()
            row("DesignNo") = "A"
            row("Design_ID") = 1
            dtDgv.Rows.Add(row)
    
            Return dtDgv
        End Function
    
        Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            Dim dgv As DataGridView = CType(sender, DataGridView)
            If dgv.Columns(e.ColumnIndex).Name = "DesignNo" _
                AndAlso Not IsDBNull(Me.DataGridView1.CurrentRow.Cells("DesignNo").Value) Then
    
                'サーバーに読みに行くとかの処理は質問者以外には意味のない処理なのでDesignNoの入力文字によって代替する
                Dim designNo As String
                Dim row As DataGridViewRow = dgv.Rows(e.RowIndex)
                designNo = CType(row.Cells("DesignNo").Value, String)
                If (designNo = "A") Then
                    dgv.CurrentRow.Cells("Design_ID").Value = 1
                ElseIf (designNo = "B") Then
                    dgv.CurrentRow.Cells("Design_ID").Value = 2
                Else
                    dgv.CurrentRow.Cells("Design_ID").Value = DBNull.Value  'DBNullを入れると消える
                End If
    
                dgv.InvalidateRow(e.RowIndex) '行の表示を再表示させて新しい値を表示させる。
            End If
    
        End Sub
    End Class

    質問や返信を入力する時の入力場所の上にいくつかボタンが並んでします。その中に「コードブロックの挿入」というのがありますから、コードを貼り付けるときに使用すると見やすい状態で貼り付けできますよ。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク yksaila 2014年9月6日 0:51
    • 回答としてマークされていない yksaila 2014年9月6日 2:43
    • 編集済み gekkaMVP 2014年9月6日 3:13 AllowDBNull=False → AllowDBNull=True
    • 回答としてマーク yksaila 2014年9月6日 3:22
    2014年9月5日 17:56
  • gekka様

    ありがとうございます。

    初めてみるコードですので、今からこれを読んで勉強します。

    質問記事に分かりにくいところがありましたので、一部変更しています(gekka様の

    回答を読む前に)。

    DesignNoを検索条件とするdatatableをdt_Item22 としていましたが、これを明確にするためにdt_Item_DNとしました。

    あと、これに関係する文章を少し変更しました。

    dt_Item22  → dt_Item_DN

    解決しましたら、あらためて、ご報告いたします。

    YKsaila

    2014年9月6日 0:51
  • gekka様

    まだ、成功していません。
    ご教示の内容に、Functionがいくつかありますが、すでにdatatableは存在しており、使用すると現在のものと干渉してエラーになります。
    (私のやり方に、間違いがあるかもしれませんが。)
    なので、下記の三つのコードは使用せずに実験してみました。 これが、失敗の原因ですか?
    Function CreateTable_DGV() / Function CreateTable_Item_DN() / Sub New()~END


    <やってみたこと>
      'データセットデザイナで厳密な型のDataTableを作っている場合
      'データベース側でNULLを許容していなくても、DataTable側のこの列のAllowDBNullをtrueにしておくこと
      'DesignNoが見つから無い場合にはデータベースへ登録しないのならば、DataTableにDBNullが入っていても構わないはず

    上記の考えを参考にして、下記のコードを加えてやってみました。
            dtDgv.Columns("Design_ID").AllowDBNull = False  'DBNullが入るようにしておく(デフォルトはTrue)  ’(B)
    ご指示ではFalseでしたが、ひょっとしてTrueかもしれないと考え、Trueも試しましたが、どちらもダメでした。

    なにをやっても、下記のエラー・メッセージがでます。
    ”DataGridViewComboboxCellの値が有効でない!”
    (B)のコードでは、DataGridViewのセル(”Design_ID”)には、DBNullが認められないようですが?


    <システムの概要>
    DataGridView内には、”CB_DesignName”・”Design_ID”・”DesignNo”・"TagName"等のCellがあります。
    Cell内のDesignNoを変更すると、これに応じてDesign_IDも自動で変更します。Design_IDが変更すると、自動でCB_DesignNameも変更します。

    ためしに、Design_IDに有効な値を入力すると、CB_DesignNameも変更します。
    Design_IDに無効な値(存在しない値)を入力すると、上記のエラーメッセージが出ます。

    これが回避(Design_IDへの無効な値(存在しない値)の入力許可)できれば、よいのですが。

    現在、苦闘中です。

    YKsaila

    2014年9月6日 2:47
  • すみません、動作テストで書き換えていたのを直し忘れていました。
    AllowDBNUll=Trueが正しいです。

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2014年9月6日 3:08
  • 一度、成功したように感じたのですが、またエラーがでたので再実験中です。

    先の書き込みは、一旦削除しておきます。

    YKSaila

    • 回答としてマーク yksaila 2014年9月6日 3:22
    • 編集済み yksaila 2014年9月6日 3:45
    • 回答としてマークされていない yksaila 2014年9月6日 4:14
    2014年9月6日 3:22
  • gekka様

    数回の実験の末、下記のようにして解決しました。前回のコメントの通り、その他の追加コードなしで、うまくいきました。

    <最終的な解決策>
    (1)下記のコードで、DatagridViewセルのDBNull入力禁止解除。
    dtDgv.Columns("Design_ID").AllowDBNull = True   'DBNullが入るようにしておく(Falseでは、なかったです)。

    (2)以下で、CB_DesignNameの表示が消えます。
    Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = DBNull.Value

    上記の二点で解決しました。

    <参考コメント>
    If dt_Item_DN.Rows.Count = 0 AndAlso Not IsDBNull(Me.DataGridView1.CurrentRow.Cells("DesignNo").Value) Then
     '---略
      Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = DBNull.Value  ':(C)
    ’---略
    Endif

    (C)の個所に下記コードを入れても、今回は不成功でした(他の場面では、成功していますが)。
     'Me.DataGridView1.CurrentRow.Cells("CB_DesignName").Value = Nothing  
     'Me.DataGridView1.CurrentRow.Cells("CB_DesignName").Value = ""

    ちなみに、
    Me.DataGridView1.Columns("CB_DesignName").DataPropertyName = dtDgv.Columns("Design_ID").ColumnName
    としている場合は、下記二行はエラーになります(他の場面では、有効ですが)。

    Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = Nothing
    Me.DataGridView1.CurrentRow.Cells("Design_ID").Value = 0

    =DBNull.Value としないといけないようです。


    基本的な考え方(方針)を示していただいた、”あの注釈”が非常にありがたかったです。
    あの注釈がなかったら、もっと苦労していたかもしれません。
    終わってみれば簡単なことなのに、知らないということ・未経験ということは、大変なことだと改めて考えさせられました。

    ありがとうございました。

    YKsaila

    • 回答としてマーク yksaila 2014年9月6日 4:14
    2014年9月6日 4:13