|
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
|