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

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

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

Re[6]: DataGridでのNULLの禁止


(過去ログ 56 を表示中)

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

■31342 / inTopicNo.1)  DataGridでのNULLの禁止
  
□投稿者/ マジョラム (3回)-(2009/01/20(Tue) 16:03:30)

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

マジョラムと申します。
再度、DataGridについて質問させてください。
環境はVB.NET 2003です。

セルの値を削除した時に、NULL値がそのまま有効に
なってしまうのですが、これを禁止する方法はありますか?
引用返信 編集キー/
■31350 / inTopicNo.2)  Re[1]: DataGridでのNULLの禁止
□投稿者/ まさる (56回)-(2009/01/20(Tue) 16:56:50)
まさる さんの Web サイト
No31342 (マジョラム さん) に返信
> マジョラムと申します。
> 再度、DataGridについて質問させてください。
> 環境はVB.NET 2003です。
>
> セルの値を削除した時に、NULL値がそのまま有効に
> なってしまうのですが、これを禁止する方法はありますか?

この辺を参考に実装できませんかね?
http://msdn.microsoft.com/ja-jp/library/aa984376%28VS.71%29.aspx
引用返信 編集キー/
■31392 / inTopicNo.3)  Re[2]: DataGridでのNULLの禁止
□投稿者/ マジョラム (4回)-(2009/01/21(Wed) 12:04:13)
まさるさん、ありがとうございます。

NULLの場合に、メッセージを表示するようにしたのですが、
メッセージを閉じると次のセルにフォーカスが移ってしまい。
結果的にNULLも許容してしまいます。

これを阻止するにはどうすればいいのでしょうか?
引用返信 編集キー/
■31508 / inTopicNo.4)  Re[3]: DataGridでのNULLの禁止
□投稿者/ まさる (59回)-(2009/01/22(Thu) 23:54:30)
まさる さんの Web サイト
No31392 (マジョラム さん) に返信
> まさるさん、ありがとうございます。
>
> NULLの場合に、メッセージを表示するようにしたのですが、
> メッセージを閉じると次のセルにフォーカスが移ってしまい。
> 結果的にNULLも許容してしまいます。
>
> これを阻止するにはどうすればいいのでしょうか?

DataGridにDataTableをバインドしているのであれば、
そのDataTableの該当列のAllowDBNullプロパティをfalseにすることで、
DataGrid上でNullを入力して別の行に移動しようとすると例外が発生すると思います。
もしかしたらこれをうまく使えばできるかもしれません。

ただ、VS2003で試せる環境がないため、これ以上はわかりません。
引用返信 編集キー/
■31603 / inTopicNo.5)  Re[4]: DataGridでのNULLの禁止
□投稿者/ マジョラム (6回)-(2009/01/26(Mon) 09:27:52)
AllowDBNullは一度は試してはいたのですが、NULLを入力しても次の
行にフォーカスが移ってしまいので、カラムが変更された時のハンドラを取得し、
メッセージを表示させるように変更しました。
それでも次の行にフォーカスが移ってしまうので他に方法がないかと思いました。

あえてメッセージは出さなくても、フォーカスが次の行に移動しなければいいのですが、
どうすればいいのでしょうか?

ソースは以下のようになっています。

    Private Sub Operator_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim readData As String  '読込みデータ

        Try
            'タイトル設定
            Me.Text = SYSTEM_NAME

            filePath = System.IO.Path.Combine(Application.StartupPath, operator.csv)
            FileNo = FreeFile()

            'ファイルチェック
            'ファイルがない場合は、新規作成
            If System.IO.File.Exists(filePath) = False Then
                'ファイルオープン
                FileOpen(FileNo, filePath, OpenMode.Output)
                FileClose(FileNo)
                FileNo = FreeFile()
            End If

            'ファイルオープン
            FileOpen(FileNo, filePath, OpenMode.Input)

            'テーブルの作成
            tbl = New DataTable(operator.csv)
            tbl_temp = New DataTable
            tbl.Columns.Add("ID", System.Type.GetType("System.String"))
            tbl.Columns("ID").AllowDBNull = False

            '列の設定
            Dim column1 As New DataGridTextBoxColumn
            With tbl.Columns("ID")
                column1.MappingName = .ColumnName
                column1.TextBox.MaxLength = 13
                column1.HeaderText = .ColumnName
                column1.Width = 150
            End With

            'TextBoxの取得
            Dim tb As TextBox = column1.TextBox

            'KeyPressイベントハンドラを追加
            AddHandler tb.KeyPress, AddressOf tb_KeyPress
            AddHandler tbl.ColumnChanging, AddressOf DataGridOperator_ColumnChanging

            'データグリッドスタイル
            Dim style As New DataGridTableStyle
            style.MappingName = tbl.TableName
            style.HeaderFont = New System.Drawing.Font _
            ("MS UI Gothic", 14.25F, System.Drawing.FontStyle.Bold, _
             System.Drawing.GraphicsUnit.Point, CType(0, System.Byte))

            style.GridColumnStyles.Add(column1)
            DataGridOperator.TableStyles.Add(style)

            Do While Not EOF(FileNo)
                readData = LineInput(FileNo)
                tbl.Rows.Add(New Object() {readData})
            Loop

            DataGridOperator.DataSource = tbl

        Catch ex As Exception
            MsgBox("オペレータマスタの読込みに失敗しました。" & vbCrLf & vbCrLf & ex.Message, MsgBoxStyle.Critical)
            Me.Close()
        Finally
            FileClose(FileNo)
        End Try

    End Sub


    Private Sub tb_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
        '0-9の文字のみを許可する
        Select Case e.KeyChar
            Case "0" To "9"
            Case vbBack
            Case Else : e.Handled = True
        End Select
    End Sub

    Private Sub DataGridOperator_ColumnChanging(ByVal sender As Object, ByVal e As System.Data.DataColumnChangeEventArgs)
        If (e.Column.ColumnName.Equals("ID")) Then
            If CType(e.ProposedValue, String) = Nothing Then
                MsgBox("値を入力してください。", MsgBoxStyle.Exclamation)
                e.Column.DefaultValue = 0
            End If
        End If
    End Sub

引用返信 編集キー/
■31915 / inTopicNo.6)  Re[5]: DataGridでのNULLの禁止
□投稿者/ マジョラム (7回)-(2009/01/30(Fri) 09:41:29)
2009/01/30(Fri) 09:42:24 編集(投稿者)

解決しました。
ご協力ありがとうございました。
解決済み
引用返信 編集キー/
■31920 / inTopicNo.7)  Re[6]: DataGridでのNULLの禁止
□投稿者/ まさる (62回)-(2009/01/30(Fri) 10:46:33)
まさる さんの Web サイト
No31915 (マジョラム さん) に返信
> 2009/01/30(Fri) 09:42:24 編集(投稿者)
>
> 解決しました。
> ご協力ありがとうございました。

解決して何よりです。あんまりお役に立てなかったようで申し訳ないです。

ところで、結局どのようにして解決されたのですか?
後学のため、フィードバックしていただけるとありがたいです。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -