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

わんくま同盟

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

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

ツリー一括表示

DataGridViewの編集モード移行 /big7_8 (18/05/01(Tue) 19:43) #87254
Re[1]: DataGridViewの編集モード移行 /WebSurfer (18/05/01(Tue) 20:20) #87255
│├ Re[2]: DataGridViewの編集モード移行 /Hongliang (18/05/01(Tue) 21:28) #87257
││└ Re[3]: DataGridViewの編集モード移行 /big7_8 (18/05/02(Wed) 15:40) #87269
│└ Re[2]: DataGridViewの編集モード移行 /big7_8 (18/05/02(Wed) 15:08) #87268
│  ├ Re[3]: DataGridViewの編集モード移行 /WebSurfer (18/05/02(Wed) 18:40) #87272
│  └ Re[3]: DataGridViewの編集モード移行 /WebSurfer (18/05/03(Thu) 11:12) #87277
│    └ Re[4]: DataGridViewの編集モード移行 /big7_8 (18/05/03(Thu) 18:28) #87284
│      └ Re[5]: DataGridViewの編集モード移行 /WebSurfer (18/05/03(Thu) 18:59) #87285
│        └ Re[6]: DataGridViewの編集モード移行 /big7_8 (18/05/05(Sat) 16:05) #87289
│          └ Re[7]: DataGridViewの編集モード移行 /palm tree (18/05/09(Wed) 15:22) #87306
│            └ Re[8]: DataGridViewの編集モード移行 /big7_8 (18/05/15(Tue) 12:39) #87361
Re[1]: DataGridViewの編集モード移行 /ななしん (18/05/02(Wed) 09:19) #87263
  └ Re[2]: DataGridViewの編集モード移行 /big7_8 (18/05/02(Wed) 16:37) #87270


親記事 / ▼[ 87255 ] ▼[ 87263 ]
■87254 / 親階層)  DataGridViewの編集モード移行
□投稿者/ big7_8 (1回)-(2018/05/01(Tue) 19:43:58)
big7_8 さんの Web サイト

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

【挨拶】
初めまして、Big7_8と申します。4/8よりVB.NETのcodingを開始しました新参者です。
宜しくお願い致します。

OS : win7 Professional 32bit
言語 : Visual Basic ツール 2.7.0-beta3-62715-05

【背景】
これまではF-BASICを利用しており、win7上で正常に動作しておりました。しかし、4月上旬に
解決不能の不具合(散々検討しましたが、プログラム上のバグではありません)を発見しまし
た。ですが、同言語は既にサポートは終了している上に、win7以降は未対応。已む無く、
開発言語を変更することに致しました。
幸い、マイクロソフトさんがVB.NETを無償で提供されているので、4/8にダウンロードさせて
頂いたのがスタートです。何分、オブジェクト指向のcodingは初めてなので、金城俊哉さんの
「VisualBasic2017 パーフェクトマスター」を読みました。読んだつもりですが、実は全然
解っておりません。解らないなりに、ネットの諸先輩方のコードを拝借して、ここまで来ま
したが、以下の問題点に引っかかり1週間以上停滞しています。

【やりたいこと】
取り敢えず、サンプルデータの保存先及び本体の参照先は皆様の環境に合わせて変更してください。
コードを見ればわかりますが、株価のデータベースです。
DataGridViewを表示したら、編集モードに移行したい。
今はまだ、codingしていませんがSub RnxCheck()の部分はマウスクリックによるイベントに
変更する予定です。

【問題点】
私の拙い理解では
Me.Show()で、DataGridViewを表示
dgv.BeginEdit(True)で、編集モードに移行
となるはずですが、編集モードに移行しているならば、その時点でプログラムの進行がストップし、
MessageBox.Show("a1")は、即表示されないはず。もしかして、間違っていました?
しかし、MessageBox.Show("a1")は、即実行されてしまいます。

https://www.weblio.jp/content/DataGridView.BeginEdit+%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89

を参照すると、「セルの型が IDataGridViewEditingCell インターフェイスを実装していない場合にも、
false が返されます。」とあります。それで、
Public Interface IDataGridViewEditingCell
End Interface
Implements IDataGridViewEditingCell
を追加しましたが、状況は変わりません。
私がインターフェイスの概念を理解していないのが原因と思われますが、どうすればいいのか
超初心者の私には解決の糸口が見つかりません。
諸先輩方、宜しくご指導の程、お願い致します。



【サンプルデータ生成コード】

Public Structure Jstock
Public dteDate As Date
Public N20O As Single
Public N20H As Single
Public N20L As Single
Public N20C As Single
End Structure


Public Class Form1
Inherits System.Windows.Forms.Form

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim js As Jstock
FileOpen(1, "e:\data\test4.dat", OpenMode.Random, , , Len(js))

js.dteDate = #4/1/2014#
js.N20O = 21657.87
js.N20H = 21719.43
js.N20L = 21591.39
js.N20C = 21660.28
FilePut(1, js, 1)
js.dteDate = #4/2/2015#
js.N20O = 21801.41
js.N20H = 21917.35
js.N20L = 21746.69
js.N20C = 21778.74
FilePut(1, js, 2)
js.dteDate = #4/3/2016#
js.N20O = 21801.41
js.N20H = 21917.35
js.N20L = 21746.69
js.N20C = 21778.74
FilePut(1, js, 3)
js.dteDate = #4/4/2017#
js.N20O = 21801.41
js.N20H = 21917.35
js.N20L = 21746.69
js.N20C = 21778.74
FilePut(1, js, 4)
js.dteDate = #4/5/2018#
js.N20O = 21801.41
js.N20H = 21917.35
js.N20L = 21746.69
js.N20C = 21778.74
FilePut(1, js, 5)

FileGet(1, js, 1)
Trace.WriteLine(js.dteDate)
Trace.WriteLine(js.N20O)
Trace.WriteLine(js.N20H)
Trace.WriteLine(js.N20L)
Trace.WriteLine(js.N20C)
FileGet(1, js, 2)
Trace.WriteLine(js.dteDate)
Trace.WriteLine(js.N20O)
Trace.WriteLine(js.N20H)
Trace.WriteLine(js.N20L)
Trace.WriteLine(js.N20C)

FileClose(1)
End Sub
End Class



【本体コード】

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.IO


Public Interface IDataGridViewEditingCell

End Interface


Public Structure Jstock
Public dteDate As Date
Public N20O As Single
Public N20H As Single
Public N20L As Single
Public N20C As Single
End Structure


Public Class Config
Public Shared dteDate As Date
Public Shared N20O As Single
Public Shared N20H As Single
Public Shared N20L As Single
Public Shared N20C As Single

Public Shared RN1 As Integer
Public Shared RNX As Integer
Public Shared COUNT As Integer
End Class


Public Class Form1
Inherits System.Windows.Forms.Form

Implements IDataGridViewEditingCell

Shared dgv As DataGridView

Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim js As Jstock
FileOpen(1, "e:\data\test4.dat", OpenMode.Random, , , Len(js))
Config.RN1 = LOF(1) / Len(js)

Config.RNX = Config.RN1


Do While Config.RNX > 0
DataGet()
If Config.COUNT = 0 Then InitializeDGV()
dgv.Rows.Clear()
FillDGV()

Me.Show()
dgv.Select()
dgv.CurrentCell = dgv(0, 4)
dgv.BeginEdit(True)
MessageBox.Show("a1")
RnxCheck()
Loop

If Config.RNX = 0 Then
FileClose(1)
Application.Exit()
End If

End Sub

Public Sub New()
dgv = New DataGridView()
dgv.Dock = DockStyle.Fill
dgv.AllowUserToAddRows = False
dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
Me.Controls.Add(dgv)
End Sub


Public Sub RnxCheck()
Dim GetString As String = dgv.CurrentCell.Value

Select Case GetString
Case ""

Case "<<"
Config.RNX = Config.RNX - 100
If Config.RNX < 1 Then Config.RNX = 1
Case "<"
Config.RNX = Config.RNX - 1
If Config.RNX < 1 Then Config.RNX = 1
Case "END"
Config.RNX = 0
Case ">"
Config.RNX = Config.RNX + 1
If Config.RNX > Config.RN1 Then Config.RNX = Config.RN1
Case ">>"
Config.RNX = Config.RNX + 100
If Config.RNX > Config.RN1 Then Config.RNX = Config.RN1
Case Else
Config.RNX = Config.RN1 '仮
End Select

End Sub



Sub InitializeDGV()
Dim column1 As New DataGridViewTextBoxColumn
column1.HeaderText = " 銘柄 "
dgv.Columns.Add(column1)

Dim column2 As New DataGridViewTextBoxColumn
column2.HeaderText = "OPEN"
dgv.Columns.Add(column2)

Dim column3 As New DataGridViewTextBoxColumn
column3.HeaderText = "HIGH"
dgv.Columns.Add(column3)

Dim column4 As New DataGridViewTextBoxColumn
column4.HeaderText = "LOW"
dgv.Columns.Add(column4)

Dim column5 As New DataGridViewTextBoxColumn
column5.HeaderText = "CLOSE"
dgv.Columns.Add(column5)

Config.COUNT = 1

End Sub

Sub FillDGV()
dgv.Rows.Add("日付等", Config.dteDate, Config.RNX)
dgv.Rows.Add()
dgv.Rows.Add("日経平均", Config.N20O, Config.N20H, Config.N20L, Config.N20C)
dgv.Rows.Add()
dgv.Rows.Add("<<", "<", "END", ">", ">>")
End Sub

Sub DataGet()
Dim js As Jstock

FileGet(1, js, Config.RNX)
Config.dteDate = js.dteDate
Config.N20O = js.N20O
Config.N20H = js.N20H
Config.N20L = js.N20L
Config.N20C = js.N20C
End Sub

End Class

[ □ Tree ] 返信 編集キー/

▲[ 87254 ] / ▼[ 87257 ] ▼[ 87268 ]
■87255 / 1階層)  Re[1]: DataGridViewの編集モード移行
□投稿者/ WebSurfer (1480回)-(2018/05/01(Tue) 20:20:18)
No87254 (big7_8 さん) に返信

アップされているコードを読む気力がないのでハズレだったらスミマセンが・・・

もし、SQL Server, Access, MySQL などのデータベースの一覧表示、編集、更新をする Windows Forms
アプリを作成しているなら、一度 Visual Studio のウィザードを使って定番の構成のアプリを作ってみ
てはいかがでしょう?

質問者さんの使っているデーターベースでウィザードが使えるかどうか分かりませんが、使えなければ
LocalDB とか SQL Server Express を使ってとりあえず作ってみて、ウィザードが自動生成するコード
を見れば今後の開発の参考になると思います。

DB が SQL Server の場合ですが、以下のチュートリアル、

チュートリアル : データベースへのデータの保存 (単一テーブル)
https://msdn.microsoft.com/ja-jp/library/0f92s97z(v=vs.120).aspx

10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (C#)
https://code.msdn.microsoft.com/windowsdesktop/10-ADONET-C-cbfe7688

・・・のように Visual Studio のデータソース構成ウィザードを利用して型付 DataSet + TableAdapter
を作って、それを利用してアプリを作ると、以下のページの図のような構造のアプリが、ほとんど自分で
コードを書くこと無しに作れます。

Windows フォーム アプリケーションでのデータへの接続
https://msdn.microsoft.com/ja-jp/library/wxt2cwcc(v=vs.120).aspx

操作に慣れると 10 分もかからず作れるはずです。今回のような問題に悩むことはなくなり、開発工数は
激減するはずです。保守工数も減るはずです。お試しください。

[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87255 ] / ▼[ 87269 ]
■87257 / 2階層)  Re[2]: DataGridViewの編集モード移行
□投稿者/ Hongliang (638回)-(2018/05/01(Tue) 21:28:33)
// コードは読んでいません。

> DataGridViewを表示したら、編集モードに移行したい。

> dgv.BeginEdit(True)で、編集モードに移行
> となるはずですが、編集モードに移行しているならば、その時点でプログラムの進行がストップし、
> MessageBox.Show("a1")は、即表示されないはず。もしかして、間違っていました?

DataGridViewにおいて、編集モードとは、「そのセルが入力可能な状態であること」を指します。
テキストを入力するセルであれば、キャレットが表示されていて、DELキーを押せばキャレットの後ろの文字が削除できる、というような状態ですね。
プログラムコードの流れとは特に関係ありません。
例えばF2キーを入力することでも編集モードに入ることができます。

big7_8さんは“どういう機能を”“どういう理由で”「編集モード」というのに求められていますか?
[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87257 ] / 返信無し
■87269 / 3階層)  Re[3]: DataGridViewの編集モード移行
□投稿者/ big7_8 (3回)-(2018/05/02(Wed) 15:40:40)
big7_8 さんの Web サイト
No87257 (Hongliang さん) に返信


Hongliang さん

はじめまして、big7_8です。
即返ありがとうございます。

> // コードは読んでいません。

コードが読み難くて申し訳ありませんでした。
WebSurfer さんへの返信で再度、字下げ、コメントをつけて提示させて頂きました
ので、ご覧ください。

> DataGridViewにおいて、編集モードとは、「そのセルが入力可能な状態であること」を指します。
> テキストを入力するセルであれば、キャレットが表示されていて、DELキーを押せばキャレットの後ろの文字が削除できる、というような状態ですね。
> プログラムコードの流れとは特に関係ありません。

そうだったのですか。てっきり編集モードになると同時にプログラムの進行がストップし、
キー入力待機になると思い込んでおりました。


> big7_8さんは“どういう機能を”“どういう理由で”「編集モード」というのに求められていますか?


実はネットから日々データを取得しますが、ネットで取得できないデータもあり、それらの入力を編集モードで
したいのです。この入力は当日だけでなく前日及び前々日に及びます。
勿論、入力後、データを保存し、その後、前日のデータを DataGridViewに表示させたいのです。

それで、行定義のところで、
dgv.Rows.Add("<<", "<", "END", ">", ">>")
レコードナンバーの変更のコントロールを用意しています。

言葉足らずで申し訳ありませんでしたが、
要は編集モードになると同時にキー入力待機状態にしたいのです。

何かよい方法はありますか?



[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87255 ] / ▼[ 87272 ] ▼[ 87277 ]
■87268 / 2階層)  Re[2]: DataGridViewの編集モード移行
□投稿者/ big7_8 (2回)-(2018/05/02(Wed) 15:08:23)
big7_8 さんの Web サイト
No87255 (WebSurfer さん) に返信

WebSurfer さん

はじめまして、big7_8です。
即返ありがとうございます。

私もSQLの利用は考慮いたしました。ですが、オブジェクト指向のプログラム自体が初めてで
とてもそこまでは頭がついていきそうにありません。

それで、SQLについては将来の課題ということで・・・

せっかくのアドバイスすみません。


> アップされているコードを読む気力がないのでハズレだったらスミマセンが・・・

コードが読み難くて申し訳ありませんでした。VB.NETからコピーした
エディッター上では字下げされていたので、これでいいと思っておりましたが、
UPしたら、 字下げが消去されていました。しかし、時間がなかったので
そのままUPしてしまいました。後、コメントがないのも読み難い理由の一つかな
と思います。それで、再度、字下げ、コメントをつけて提示させて頂きます。


【サンプルデータ生成コード】
'構造体の宣言
Public Structure Jstock
   Public dteDate As Date
   Public N20O As Single
   Public N20H As Single
   Public N20L As Single
   Public N20C As Single
End Structure


Public Class Form1
   Inherits System.Windows.Forms.Form

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     Dim js As Jstock
     FileOpen(1, "e:\data\test4.dat", OpenMode.Random, , , Len(js))

     'データ入力
     js.dteDate = #4/1/2014#
     js.N20O = 21657.87
     js.N20H = 21719.43
     js.N20L = 21591.39
     js.N20C = 21660.28
     FilePut(1, js, 1)
     js.dteDate = #4/2/2015#
     js.N20O = 21801.41
     js.N20H = 21917.35
     js.N20L = 21746.69
     js.N20C = 21778.74
     FilePut(1, js, 2)
     js.dteDate = #4/3/2016#
     js.N20O = 21801.41
     js.N20H = 21917.35
     js.N20L = 21746.69
     js.N20C = 21778.74
     FilePut(1, js, 3)
    js.dteDate = #4/4/2017#
    js.N20O = 21801.41
     js.N20H = 21917.35
    js.N20L = 21746.69
     js.N20C = 21778.74
     FilePut(1, js, 4)
     js.dteDate = #4/5/2018#
    js.N20O = 21801.41
     js.N20H = 21917.35
     js.N20L = 21746.69
    js.N20C = 21778.74
     FilePut(1, js, 5)

     'データ閲覧
     FileGet(1, js, 1)
    Trace.WriteLine(js.dteDate)
     Trace.WriteLine(js.N20O)
     Trace.WriteLine(js.N20H)
    Trace.WriteLine(js.N20L)
     Trace.WriteLine(js.N20C)
     FileGet(1, js, 2)
    Trace.WriteLine(js.dteDate)
     Trace.WriteLine(js.N20O)
     Trace.WriteLine(js.N20H)
    Trace.WriteLine(js.N20L)
     Trace.WriteLine(js.N20C)

     FileClose(1)
   End Sub
End Class


【本体コード】

Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.IO


Public Interface IDataGridViewEditingCell

End Interface

'構造体の宣言
Public Structure Jstock
   Public dteDate As Date
   Public N20O As Single
   Public N20H As Single
   Public N20L As Single
   Public N20C As Single
End Structure

'グローバル変数の宣言
Public Class Config
   Public Shared dteDate As Date
   Public Shared N20O As Single
   Public Shared N20H As Single
   Public Shared N20L As Single
   Public Shared N20C As Single

   Public Shared RN1 As Integer
   Public Shared RNX As Integer
   Public Shared COUNT As Integer
End Class


Public Class Form1
   Inherits System.Windows.Forms.Form

   Implements IDataGridViewEditingCell

   Shared dgv As DataGridView

   Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

     Dim js As Jstock
     FileOpen(1, "e:\data\test4.dat", OpenMode.Random, , , Len(js))
     '最大レコード数
     Config.RN1 = LOF(1) / Len(js)
     '初期表示を最大レコードに設定
     Config.RNX = Config.RN1


     'RnxCheck()でENDを選択したとき、LoopをExit
     Do While Config.RNX > 0
       DataGet()
       '初回のみ列を定義
       If Config.COUNT = 0 Then InitializeDGV()
       '行の初期化
       dgv.Rows.Clear()
       '行を定義及びセルのデータ引き渡し
       FillDGV()

       'DataGridViewの表示
       Me.Show()
       dgv.Select()
       dgv.CurrentCell = dgv(0, 4)
       dgv.BeginEdit(True)
       MessageBox.Show("a1")
       '参照レコードナンバーの変更
       RnxCheck()
     Loop

     '終了(RnxCheck()でENDを選択)
     If Config.RNX = 0 Then
       FileClose(1)
       Application.Exit()
     End If

   End Sub

   'コンストラクタ-
   Public Sub New()
     dgv = New DataGridView()
     dgv.Dock = DockStyle.Fill
     dgv.AllowUserToAddRows = False
     dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
     Me.Controls.Add(dgv)
   End Sub


   '参照レコードナンバーの変更
   Public Sub RnxCheck()
     Dim GetString As String = dgv.CurrentCell.Value

     Select Case GetString
       Case ""

       Case "<<"
         Config.RNX = Config.RNX - 100
         If Config.RNX < 1 Then Config.RNX = 1
       Case "<"
         Config.RNX = Config.RNX - 1
         If Config.RNX < 1 Then Config.RNX = 1
       Case "END"
         Config.RNX = 0
       Case ">"
         Config.RNX = Config.RNX + 1
         If Config.RNX > Config.RN1 Then Config.RNX = Config.RN1
       Case ">>"
         Config.RNX = Config.RNX + 100
         If Config.RNX > Config.RN1 Then Config.RNX = Config.RN1
       Case Else
         Config.RNX = Config.RN1 '仮
     End Select

   End Sub


   '列を定義
   Sub InitializeDGV()
     Dim column1 As New DataGridViewTextBoxColumn
     column1.HeaderText = " 銘柄 "
     dgv.Columns.Add(column1)

     Dim column2 As New DataGridViewTextBoxColumn
     column2.HeaderText = "OPEN"
     dgv.Columns.Add(column2)

     Dim column3 As New DataGridViewTextBoxColumn
     column3.HeaderText = "HIGH"
     dgv.Columns.Add(column3)

     Dim column4 As New DataGridViewTextBoxColumn
     column4.HeaderText = "LOW"
     dgv.Columns.Add(column4)

     Dim column5 As New DataGridViewTextBoxColumn
     column5.HeaderText = "CLOSE"
     dgv.Columns.Add(column5)

     Config.COUNT = 1

   End Sub

   '行を定義
   Sub FillDGV()
     dgv.Rows.Add("日付等", Config.dteDate, Config.RNX)
     dgv.Rows.Add()
     dgv.Rows.Add("日経平均", Config.N20O, Config.N20H, Config.N20L, Config.N20C)
     dgv.Rows.Add()
     dgv.Rows.Add("<<", "<", "END", ">", ">>")
   End Sub


   Sub DataGet()
     Dim js As Jstock

     FileGet(1, js, Config.RNX)
     Config.dteDate = js.dteDate
     Config.N20O = js.N20O
     Config.N20H = js.N20H
     Config.N20L = js.N20L
     Config.N20C = js.N20C
   End Sub

End Class

[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87268 ] / 返信無し
■87272 / 3階層)  Re[3]: DataGridViewの編集モード移行
□投稿者/ WebSurfer (1481回)-(2018/05/02(Wed) 18:40:57)
No87268 (big7_8 さん) に返信

最初の質問に、

> 株価のデータベースです。

とあったので、SQL Server, Access, MySQL などのデータベースからデータを取得すると思って
いたのですが、データソースには質問者さんの独自構造のファイルを使って、しかもファイルア
クセスには VB 独自のメソッドを使うということのようですね。

で、そうして取得したデータを DataGridView に表示し、ユーザーが編集した結果を元のデータ
ソース(独自構造のファイル)に反映させるということでしょうか?

> 私もSQLの利用は考慮いたしました。ですが、オブジェクト指向のプログラム自体が初めてで
> とてもそこまでは頭がついていきそうにありません。
>
> それで、SQLについては将来の課題ということで・・・

そこのところは思い違いかと。オブジェクト指向の知識がないと SQL Server などのリレーショナ
ルデータベースは扱えないということは全くないです。

そこを「将来の課題」ではなくて今の課題として解決してはいかがですか? 間違いなくその方が、
今やっていることと比べて、乗り越えなければならない壁は低い(多分はるかに低い)と思います。

何故なら、SQL Server 等のデータベースにデータを入力できてしまえば、あとは Visual Studio
のウィザードを使ってほとんど自力でコードを書くことなしに(簡単なものなら一行もコードは書
かずに)アプリが作れるからです。

SQL Server はちょっと敷居が高いかもしれませんが、であれば LocalDB とか Access を考えては
いかがでしょう?

どうしても今質問者さんが考えておられる方向で進みたいということですと、自分はついていけま
せん。その場合は、すみませんが、このスレッドからは撤退させてください。

[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87268 ] / ▼[ 87284 ]
■87277 / 3階層)  Re[3]: DataGridViewの編集モード移行
□投稿者/ WebSurfer (1482回)-(2018/05/03(Thu) 11:12:25)
No87268 (big7_8 さん) に返信

【追伸】

以前の他スレッド(url 下記)の話を思い出してのレスですが、SQL Server, Access, MySQL 等を
使うことにどうしても抵抗があって踏み切れないなら、独自構造のファイルではなくて xml ファイ
ルを使うという案はいかがですか?

datagridviewからxmlへの出力について
http://bbs.wankuma.com/index.cgi?mode=al2&namber=87059

上のスレッドのレス No87091 のように実装すれば「DataGridViewの編集モード移行」とかは考える
必要はなく、ユーザーは DataGirdView を編集でき、編集結果は自動的に DataSet / DataTable に
反映されます。

そして、編集済みの DataSet / DataTable の内容はごく簡単なコードで xml ファイルに反映でき
ます。(.NET のライブラリにその目的に利用できるものがありますので、自力でコードを書くのは
かなり少なくて済みます)

xml ファイルを使うのもダメということなら、せめて以下のように階層を分けて考えてみてはいか
がですか?(BL はビジネスロジックの略で、レス No87091 で言うと (3) が該当します)

DataGridView ⇔ BindingSource ⇔ DataSet / DataTable ⇔ BL ⇔ 独自構造ファイル

そうすれば、話は「⇔ BL ⇔ 独自構造ファイル」部分だけを考えれば済みそうな気がします。
[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87277 ] / ▼[ 87285 ]
■87284 / 4階層)  Re[4]: DataGridViewの編集モード移行
□投稿者/ big7_8 (5回)-(2018/05/03(Thu) 18:28:40)
big7_8 さんの Web サイト
No87277 (WebSurfer さん) に返信

WebSurfer さん

big7_8です。
度々、ご親切にご指導ありがとうございます。


> 以前の他スレッド(url 下記)の話を思い出してのレスですが、SQL Server, Access, MySQL 等を
> 使うことにどうしても抵抗があって踏み切れないなら、独自構造のファイルではなくて xml ファイ
> ルを使うという案はいかがですか?

xmlファイルのご提案ありがとうございます。
しかし、その必要はもうありません。

本日、SQL Server Express 2014 をダウンロードし、インストールしました。

オープンソースのDBはいろいろありますが、Visual Studio 2017に相性のいいのは
やはりMicrosoftの製品だと思います。
で、同社のSQLを検索するとExpressが無償とのこと。
DBとしての規模も小規模事業者向けとはいえ、10GBは十分な規模です。
Express2017はOSが対応していないので、win7に対応するバージョンを探すと
Express2014でした。

ということで、無償提供していただいているMicrosoftに感謝しつつ、
同製品をダウンロードし、インストールしました。
まだ、インストールしただけで、何をどうすればいいか五里霧中ですが・・・


> 上のスレッドのレス No87091 のように実装すれば「DataGridViewの編集モード移行」とかは考える
> 必要はなく、ユーザーは DataGirdView を編集でき、編集結果は自動的に DataSet / DataTable に
> 反映されます。

ご指摘の通り、元々DBはデータの追加、変更、削除等を前提としたソフトですから、
「DataGridViewの編集モ行ード移行」は不必要なのかもしれません。

取り敢えず、しばらくはSQL Server Express 2014と格闘してみたいと思います。


もしかしたら、DataGirdViewとSQLの連携等でまたご指導をお願いするかもしれません。

尚、今後の方針としては
@独自DBをSQLに移行する方法を試みる
A独自DBでのDataGridViewの編集モ行ード移行する方法を模索する
この2本立てで行くことにしたいと思います。


WebSurfer さんには申し訳ありませんが、私としてはあっさり、当方の
構築したDBを捨て切れないものがあります。
まあ、仮に独自DBでうまく行っても、将来的にはSQLになるんでしょうが・・・



[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87284 ] / ▼[ 87289 ]
■87285 / 5階層)  Re[5]: DataGridViewの編集モード移行
□投稿者/ WebSurfer (1483回)-(2018/05/03(Thu) 18:59:54)
No87284 (big7_8 さん) に返信

> 構築したDBを捨て切れないものがあります。

そうであっても、アプリの構成は先のレスで書きましたように、

DataGridView ⇔ BindingSource ⇔ DataSet / DataTable ⇔ BL ⇔ 独自構造ファイル

が良いと思います。合わせて検討していただければ幸いです。
[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87285 ] / ▼[ 87306 ]
■87289 / 6階層)  Re[6]: DataGridViewの編集モード移行
□投稿者/ big7_8 (6回)-(2018/05/05(Sat) 16:05:08)
big7_8 さんの Web サイト
No87285 (WebSurfer さん) に返信

WebSurfer さん

big7_8です。
追加のご提案ありがとうございます。


> DataGridView ⇔ BindingSource ⇔ DataSet / DataTable ⇔ BL ⇔ 独自構造ファイル
>
> が良いと思います。合わせて検討していただければ幸いです。

検討してみますとご返事したいところですが、
現状は無理です。

教えを乞うているのに、こんなことを申し上げるのは甚だ失礼だと思いますが、
私はIT企業に勤めていた訳ではなく、ましてやSEでもありません。
要は素人に毛が生えている程度のレベルなので、
WebSurferさんのご提案に、私の技術レベルがついていけません。


従って、現状ではご提案頂いたSQLについて理解を深めようと考えております。
本日、アマゾンで
「MCP教科書 SQL Server 2012」
という書籍の購入を致しました。
ネットでも、いろいろ見ています。ADO.NETの知識が不可欠であることが
わかり、その辺を勉強中です。

ということで、誠に申し訳ありませんが、少し長い目で見て頂けたらと思います。


[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87289 ] / ▼[ 87361 ]
■87306 / 7階層)  Re[7]: DataGridViewの編集モード移行
□投稿者/ palm tree (1回)-(2018/05/09(Wed) 15:22:08)
2018/05/09(Wed) 15:27:52 編集(投稿者)

big7_8さん、どうやら元の質問から大分脱線してしまいましたね。
何だか、データベースを使え、とか、本題とは全く関係ないレスが付いていて気の毒です。

Windowsフォームアプリは、基本的に、何かのイベントを以て処理が実行されると考えてください。
通常は、ソフトはアイドル状態で、ボタンクリック等のイベントをトリガーとして動作が行われます。
このため、ステートメントの途中で処理が止まる、ということはあり得ないことなのです。
このため、まずはイベントについて学習することをお勧めします。

これは、データベース云々以前の、押さえておかなければならない所ですので、まずはデータベースのことは忘れてください。


#以下サイトは、結構分かりやすくVBを開設していますので、ご一読を。
 Visual Basic 中学校
  http://rucio.a.la9.jp/main/main.htm


ところで、DataGridViewの「編集モード」って、具体的にどのような状態を意味していますか?
何のためにDataGridViewを「編集モード」にしたいのでしょうか?
[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87306 ] / 返信無し
■87361 / 8階層)  Re[8]: DataGridViewの編集モード移行
□投稿者/ big7_8 (7回)-(2018/05/15(Tue) 12:39:05)
big7_8 さんの Web サイト
No87306 (palm tree さん) に返信

palm tree さん

返信が遅くなって申し訳ありません。


> Windowsフォームアプリは、基本的に、何かのイベントを以て処理が実行されると考えてください。
> 通常は、ソフトはアイドル状態で、ボタンクリック等のイベントをトリガーとして動作が行われます。
> このため、ステートメントの途中で処理が止まる、ということはあり得ないことなのです。
> このため、まずはイベントについて学習することをお勧めします。

実は、イベントドリブン型のプログラムは初めてで、私も、

Do While Config.RNX > 0
Loop

で制御構造にしたのが、間違いの元だと気が付きました。
正直、「穴があったら入りたい」という心境です。


> #以下サイトは、結構分かりやすくVBを開設していますので、ご一読を。
>  Visual Basic 中学校
>   http://rucio.a.la9.jp/main/main.htm

ありがとうございます。
実は、ちょうどこちらのサイトで再勉強させていただいている
最中でした。


> ところで、DataGridViewの「編集モード」って、具体的にどのような状態を意味していますか?
> 何のためにDataGridViewを「編集モード」にしたいのでしょうか?

すみません。この件は忘れてください。
多分ですが、DataGridViewの表示が完了した時点で、編集モードに
なっているのではないかと、今は考えております。
イベントドリブン型のプログラムでは、この時点で次のイベント待機に
なっているはずですので、

Do While Config.RNX > 0
Loop

の制御構造を廃止。そして、

'参照レコードナンバーの変更
   Public Sub RnxCheck()
     Dim GetString As String = dgv.CurrentCell.Value

     Select Case GetString
       Case ""

       Case "<<"
         Config.RNX = Config.RNX - 100
         If Config.RNX < 1 Then Config.RNX = 1
       Case "<"
         Config.RNX = Config.RNX - 1
         If Config.RNX < 1 Then Config.RNX = 1
       Case "END"
         Config.RNX = 0
       Case ">"
         Config.RNX = Config.RNX + 1
         If Config.RNX > Config.RN1 Then Config.RNX = Config.RN1
       Case ">>"
         Config.RNX = Config.RNX + 100
         If Config.RNX > Config.RN1 Then Config.RNX = Config.RN1
       Case Else
         Config.RNX = Config.RN1 '仮
     End Select

   End Sub

この部分をマウスクリックイベントに変更すれば、問題は解決すると
思われます。とは言え、対処療法で、当面の問題さえ解決すればいいのか
と言えば、違うと思います。

で、今はご提案頂いたサイトのみならず、書籍等で新ためて、
VB.netの初歩の初歩を勉強しているところです。



このサイトの皆様、不勉強なままでご質問していまい
申し訳ありませんでした。



[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87254 ] / ▼[ 87270 ]
■87263 / 1階層)  Re[1]: DataGridViewの編集モード移行
□投稿者/ ななしん (1回)-(2018/05/02(Wed) 09:19:47)
dgv.BeginEdit(True)を行っても、カレントセルが入力状態になるだけで、入力が確定するまで処理が中断するわけではありません。
編集の終了を検知するのであれば、CellEndEditイベントを使用してください。
[ 親 87254 / □ Tree ] 返信 編集キー/

▲[ 87263 ] / 返信無し
■87270 / 2階層)  Re[2]: DataGridViewの編集モード移行
□投稿者/ big7_8 (4回)-(2018/05/02(Wed) 16:37:07)
big7_8 さんの Web サイト
No87263 (ななしん さん) に返信


ななしん さん

はじめまして、big7_8です。
ご返信ありがとうございます。


> dgv.BeginEdit(True)を行っても、カレントセルが入力状態になるだけで、入力が確定するまで処理が中断するわけではありません。

Hongliang さんにも同様のご指摘をいただきました。
では、 dgv.BeginEdit(True)の後、処理を中断させるにはどうすればいいのでしょうか?

Thread.Sleepメソッドではフリーズした様に一切の操作が不能になるとありました。
他にキー入力待機状態にする方法はありますでしょうか?



> 編集の終了を検知するのであれば、CellEndEditイベントを使用してください。

多分、今回の問題を解決した後に必要となる処理だと思います。勉強しておきます。


[ 親 87254 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -