DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridについての基本的な質問です・・・。

環境/言語:[WinXP VB.NET]
分類:[.NET]

大変簡単なことなのでしょうが、
なんせ初心者なもんで、わからないことだらけです。
どうか教えてください。

VB.NETでDataGridを使っているのですが、
ボタンをクリックするたびに、2つのテキストボックスから値を
読み込んでセルに横に並べるプログラムを作りたいのですが、
一回目はうまくいくのですが、2回目(2行目)以降になると、
テキストボックスの値がDataGridに反映されません・・・。
どうすればいいのでしょう?

よろしくお願いします。
どういうコード書いたのかわからないと答えようがないと思いますが。
■No10341に返信(medakaさんの記事)
> どういうコード書いたのかわからないと答えようがないと思いますが。

medakaさん、返信ありがとうございます。
一応今のところ、一行目だけ書かれるソースコードを記述します。
よろしくお願いします。


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim shozoku As String
Dim shikaku As String
Dim shimei As String
Dim mokuteki As String
Dim jikan As Date
Dim dataSet As DataSet = New DataSet
Dim dataTable As DataTable

shozoku = Textbox1.text
shikaku = Textbox2.text
shimei = Textbox3.text
mokuteki = Textbox4.text
jikan = Microsoft.VisualBasic.Now

'テーブルの作成
dataTable = dataSet.Tables.Add("本日の登録者")
dataTable.Columns.Add("所属", Type.GetType("System.String"))
dataTable.Columns.Add("資格", Type.GetType("System.String"))
dataTable.Columns.Add("氏名", Type.GetType("System.String"))
dataTable.Columns.Add("目的", Type.GetType("System.String"))
dataTable.Columns.Add("日時", Type.GetType("System.DateTime"))


'データの作成
dataTable.Rows.Add(New Object() {shozoku, shikaku, shimei, mokuteki, jikan})

'DataGrid1 に設定を反映
DataGrid1.SetDataBinding(dataSet, dataTable.TableName)

End Sub

今こんなカンジになっています。
要はボタンを押すたびにテキストボックスの文字列が
データグリッドに改行されて新しい行に
表示されるようにしたいのです。
よろしくお願いします。
2005/04/11(Mon) 16:01:45 編集(投稿者)

■No10342に返信(Icemanさんの記事)
お疲れ様です。HSD所属のbettaです。

dataSetとdataTableがローカル変数なのが原因かと思います。
この二つをモジュールスコープのとこに持っていくと、
解決するかもです。

あっと、忘れてました。
'テーブルの作成
も、フォームのロード(最初にヤルッぽいとこ)のとこに持っていかないといけませんね。
betta様

返信ありがとうございます。
とても助かります・・・が、
モジュールスコープという意味がわかりませぬ・・・。
多分DatasetとDataTableの宣言のところを
他のところで宣言する(?)みたいなことだと
思うのですが・・・。
検索かけてもモジュールスコープなる言葉は
見つかりませんでした。
すいません・・・。

> dataSetとdataTableがローカル変数なのが原因かと思います。
> この二つをモジュールスコープのとこに持っていくと、
> 解決するかもです。
■No10345に返信(Icemanさんの記事)
お疲れ様です。HSD所属のbettaです。

> モジュールスコープという意味がわかりませぬ・・・。
> 多分DatasetとDataTableの宣言のところを
> 他のところで宣言する(?)みたいなことだと
> 思うのですが・・・。
一番上の
Public Class Form1
Inherits System.Windows.Forms.Form
みたいなところに
Private dataSet As dataSet = New dataSet
Private dataTable As dataTable
って、追加するとモジュールスコープ?(ちょっと不安)になると思います。
betta様

できました!
かすかな記憶とカンを頼りにして作成しました。
よくばりですいませんが、
↓のコードで書くと
「jikan」という変数は日時であるのに、
DataGridに書き出すと日付のみとなってしまうのですが、
それはなぜでしょうか?
dataTable.Columns.Add("日時", Type.GetType("System.DateTime"))
がいけないのですかね?


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'テーブルの作成
DataTable = DataSet.Tables.Add("本日の登録者")
DataTable.Columns.Add("所属", Type.GetType("System.String"))
DataTable.Columns.Add("資格", Type.GetType("System.String"))
DataTable.Columns.Add("氏名", Type.GetType("System.String"))
DataTable.Columns.Add("目的", Type.GetType("System.String"))
dataTable.Columns.Add("日時", Type.GetType("System.DateTime"))

'DataGrid1 に設定を反映
DataGrid1.SetDataBinding(dataSet, dataTable.TableName)

If DataGrid1.ReadOnly = False Then
DataGrid1.ReadOnly = True
End If

End Sub


Public dataSet As dataSet = New dataSet
Public dataTable As dataTable

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim shozoku As String
Dim shikaku As String
Dim shimei As String
Dim mokuteki As String
Dim jikan As Date

shozoku = TextBox1.Text
shikaku = TextBox2.Text
shimei = TextBox3.Text
mokuteki = TextBox4.Text
jikan = Microsoft.VisualBasic.Now

'データの作成
dataTable.Rows.Add(New Object() {shozoku, shikaku, shimei, mokuteki, jikan})

'DataGrid1 に設定を反映
DataGrid1.SetDataBinding(dataSet, dataTable.TableName)

End Sub
betta様

おっと、重なってしまいましたね・・・。
betta様のやり方は「Private」で
私が今試したのは「Public」なんですが、
どういう違いが発生するんですかね・・・!?
Publicでできたからいいっていう問題でしょうか?
■No10348に返信(Icemanさんの記事)
お疲れ様です。HSD所属のbettaです。

> 「jikan」という変数は日時であるのに、
> DataGridに書き出すと日付のみとなってしまうのですが、
> それはなぜでしょうか?
> dataTable.Columns.Add("日時", Type.GetType("System.DateTime"))
> がいけないのですかね?
あれ、ほんとですね。
なんでだろ?
ちょっと調べてみようかな、もしわかれば投稿します。
期待しないでください。
betta様

よろしくお願いします。
期待してます!(笑)

私も調べてみます!!
■No10349に返信(Icemanさんの記事)
お疲れ様です。HSD所属のbettaです。

> betta様
> > おっと、重なってしまいましたね・・・。
> betta様のやり方は「Private」で
> 私が今試したのは「Public」なんですが、
> どういう違いが発生するんですかね・・・!?
> Publicでできたからいいっていう問題でしょうか?
このクラスのみで利用するのなら、「Private」にしとくのが、
無難と思います。
■No10351に返信(Icemanさんの記事)
お疲れ様です。HSD所属のbettaです。

> DataGridに書き出すと日付のみとなってしまうのですが、
ぐはっ、無念でござる。
たぶん、DataGridがなんかやってるっぽいです。
でも、表示だけなら、
dataTable.Columns.Add("日時", Type.GetType("System.String"))
と、"System.String"にしたら時間も表示しました。
■No10353に返信(bettaさんの記事)
betta様

早速の返信ありがとうございました!
String型でもいいんです!!
これでやることにしました!
何から何まで本当にありがとうございます!
これからもがんばりますので
また何かわからないことがあったらよろしくお願いします!
解決済み!
■No10347に返信(bettaさんの記事)
> って、追加するとモジュールスコープ?(ちょっと不安)になると思います。

クラスの概念的に、モジュール スコープ なんてものはありません。
この場合は、クラスに包容されたメンバ変数なので、
「プライベート メンバ」と言います。

DOBON.NET | プログラミング道 | プログラミング掲示板