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

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

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

プロジェクト間〜の続きで


(過去ログ 2 を表示中)

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

■1491 / inTopicNo.1)  プロジェクト間〜の続きで
  
□投稿者/ ヘルプ 准尉(26回)-(2005/10/01(Sat) 11:26:28)

分類:[VB.NET] 


分類:[VB.NET] 

プロジェクト間のデータの受け渡しで質問させてもらって解決したのですが、これ以外にいい書き方(今は無理やり表示させてるようない気がして・・・)があったら教えてください。
<下記コード>
frm表示
↓Private Sub btn検索_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn検索.Click
Dim f As WindowsApplication1.frm検索 = New WindowsApplication1.frm検索
If f.ShowDialog = DialogResult.OK Then
txtID.Text = f.GetValue1
txt名前.Text = f.GetValue2
txt住所.Text = f.GetValue3

End If
f.Dispose()
End Sub

=========================================================================
frm検索

Private m_MasterDt As DataTable

Private Sub frm検索_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim sqlCon As SqlClient.SqlConnection
Dim cStyle(2) As DataGridColumnStyle
Dim tStyle As DataGridTableStyle
Dim gTextCol1 As DataGridTextBoxColumn
Dim gTextBox1 As DataGridTextBox
Dim a As String

Try
sqlCon = New SqlClient.SqlConnection( _
"Data Source = localhost;PersistSecurityInfo=False" _
+ ";Integrated Security=SSPI;database=Yuukari")

Dim dSet As DataSet = New DataSet("情報")
Dim dAdp As SqlClient.SqlDataAdapter

sqlCon.Open()

dAdp = New SqlClient.SqlDataAdapter( _
"SELECT * FROM T_情報", sqlCon)
dAdp.Fill(dSet, "情報")

Me.m_MasterDt = dSet.Tables("情報")
tStyle = New DataGridTableStyle
tStyle.MappingName = "情報"
DataGrid1.TableStyles.Add(tStyle)

cStyle(0) = New DataGridTextBoxColumn
cStyle(0).MappingName = "ID"
cStyle(0).HeaderText = "ID"
cStyle(0).Width = 50
tStyle.GridColumnStyles.Add(cStyle(0))

cStyle(1) = New DataGridTextBoxColumn
cStyle(1).MappingName = "名前"
cStyle(1).HeaderText = "名前"
cStyle(1).Width = 100
tStyle.GridColumnStyles.Add(cStyle(1))

cStyle(2) = New DataGridTextBoxColumn
cStyle(2).MappingName = "住所"
cStyle(2).HeaderText = "住所"
cStyle(2).Width = 200
tStyle.GridColumnStyles.Add(cStyle(2))

'gTextCol1 = tStyle.GridColumnStyles(0)
'gTextBox1 = gTextCol1.TextBox


'AddHandler gTextBox1.TextChanged, AddressOf btnOK_Click
'a = DataGrid1.Item(DataGrid1.CurrentRowIndex, 0)


DataGrid1.CaptionText = "情報"
DataGrid1.CaptionForeColor = Color.Red
DataGrid1.CaptionBackColor = Color.White
DataGrid1.DataSource = Me.m_MasterDt


Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
sqlCon.Close()
End Sub

Private Sub btnOK_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOK.Click
Me.DialogResult = DialogResult.OK
Me.Close()
End Sub
Public Function GetValue1() As String
Dim a As String
a = DataGrid1.Item(DataGrid1.CurrentRowIndex, 0)
Return a

End Function
Public Function GetValue2() As String
Dim b As String
b = DataGrid1.Item(DataGrid1.CurrentRowIndex, 1)
Return b

End Function
Public Function GetValue3() As String
Dim c As String
c = DataGrid1.Item(DataGrid1.CurrentRowIndex, 2)
Return c
End Function

=========================================================================-
このようにretuenでのやりとりや、DataGridからのデータの出し方が無理やりっぽいのです。
<動き>
@frm表示で検索ボタンを押す。
Afrm検索でDataGridにデータベースにあるデータ取得し、列を選択してOKボタン押す。
Bfrm表示が表示され、txtID,txt名前,txt住所にそれぞれ表示される。
以上が簡単なうごきです、何かアドバイス、変更点があったらご伝授よろしくお願いします。


0
引用返信 編集キー/
■1494 / inTopicNo.2)  Re[1]: プロジェクト間〜の続きで
□投稿者/ Jitta 少尉(32回)-(2005/10/02(Sun) 06:30:06)

分類:[VB.NET] 

わからん

まず、“プロジェクト”の構成を明らかにしてください。

 で、プロジェクトは違うけど、ソリューションは同じなら、プロジェクト参照をさせます。

 次に、“クラスではなくオブジェクトを”共有できる仕組みを考えます。
 アプリケーションが全く別なら、「アプリケーションドメイン間通信」を使います。ソケットで通信しても良いし、ファイルを使っても良いし、メッセージを使ったり、共有メモリを使ったり、、、、

 同じアプリケーションで、メインプロジェクトとクラスライブラリで通信するなら、“同じオブジェクト”を操作できるようにします。
 間にクラスを挟むなら、そのクラスをシングルトンにします。
 挟まないなら、メインプロジェクトがクラスライブラリのクラスをオブジェクト化します。


 クラスの共有と、オブジェクトの共有が理解できていないように思われ。。。
_____________________________________________________________________________
□ Posted by Jitta on 2005/10/02
http://quick-tips.hp.infoseek.co.jp/ じったのノート
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006

0
引用返信 編集キー/
■1495 / inTopicNo.3)  Re[2]: プロジェクト間〜の続きで
□投稿者/ Jitta 少尉(33回)-(2005/10/02(Sun) 06:45:25)

分類:[VB.NET] 

上、取り消し。。。

“図表モード”にしたら、インデントも出来るようです。

 んで、

> このようにretuenでのやりとりや、DataGridからのデータの出し方が
> 無理やりっぽいのです。

これの意味がわかりません。“無理”ってのは、どのようなことを試みたところ、
どうなったから、“無理”と判断したのでしょう?ただ『無理っぽい』と書かれて
も、「無理じゃない」と返したくなります、この内容なら。


っつうか、DatraGrid1 を返そうとした?そりゃ無理だわ。
m_MasterDt を返してください。

' せっかくここで宣言しているんだから
Private m_MasterDt As DataTable

Private Sub frm検索_Load(...) Handles MyBase.Load
...
Try
sqlCon = New SqlClient.SqlConnection(...)

Dim dSet As DataSet = New DataSet("情報")
Dim dAdp As SqlClient.SqlDataAdapter

sqlCon.Open()

dAdp = New SqlClient.SqlDataAdapter( _
"SELECT * FROM T_情報", sqlCon)
dAdp.Fill(dSet, "情報")

Me.m_MasterDt = dSet.Tables("情報")
...

Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
' 元のでもいいけど、Catch 内で return することもあるので、
' このような形で覚える。
' DataAdapter も Dispose が必要なので、
' try の外で宣言して、finally で dispose する
sqlCon.Close()
End Try
End Sub

' VB のプロパティって、こうだっけ?
Public Property DataTable MasterTable
Get
return m_MasterDt
End Get
End Propperty

_____________________________________________________________________________
□ Posted by Jitta on 2005/10/02
http://quick-tips.hp.infoseek.co.jp/ じったのノート
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006


0
引用返信 編集キー/
■1498 / inTopicNo.4)  Re[3]: プロジェクト間〜の続きで
□投稿者/ ヘルプ 准尉(28回)-(2005/10/03(Mon) 09:37:06)

分類:[VB.NET] 

No1495に返信(Jittaさんの記事)
返事送れてすみません。
>>このようにretuenでのやりとりや、DataGridからのデータの出し方が
>>無理やりっぽいのです。
>
> これの意味がわかりません。“無理”ってのは、どのようなことを試みたところ、
> どうなったから、“無理”と判断したのでしょう?ただ『無理っぽい』と書かれて
> も、「無理じゃない」と返したくなります、この内容なら。
『無理っぽい』ではなくて『無理やり』です。できたのですが、やり方が強引だったのかな?というい意味です。

> っつうか、DatraGrid1 を返そうとした?そりゃ無理だわ。
> m_MasterDt を返してください。
DataGrid1に入っている値を返しただけですが、ちゃんとできました。

> ' せっかくここで宣言しているんだから
> Private m_MasterDt As DataTable
>
> Private Sub frm検索_Load(...) Handles MyBase.Load
> ...
> Try
> sqlCon = New SqlClient.SqlConnection(...)
>
> Dim dSet As DataSet = New DataSet("情報")
> Dim dAdp As SqlClient.SqlDataAdapter
>
> sqlCon.Open()
>
> dAdp = New SqlClient.SqlDataAdapter( _
> "SELECT * FROM T_情報", sqlCon)
> dAdp.Fill(dSet, "情報")
>
> Me.m_MasterDt = dSet.Tables("情報")
> ...
>
> Catch ex As Exception
> MessageBox.Show(ex.Message)
> Finally
> ' 元のでもいいけど、Catch 内で return することもあるので、
> ' このような形で覚える。
> ' DataAdapter も Dispose が必要なので、
> ' try の外で宣言して、finally で dispose する
> sqlCon.Close()
> End Try
> End Sub
>
> ' VB のプロパティって、こうだっけ?
> Public Property DataTable MasterTable
> Get
> return m_MasterDt
> End Get
> End Propperty
↑の返し方だとm_MasterDtにある情報を全て返すことになるんじゃないですか?
選択した一つの情報だけ返したいのです。

0
引用返信 編集キー/
■1502 / inTopicNo.5)  Re[4]: プロジェクト間〜の続きで
□投稿者/ Jitta 少尉(34回)-(2005/10/03(Mon) 20:07:00)

分類:[VB.NET] 

 えっと、書くときに気をつけていただきたいのが、「暗黙知を公開する」ということです。
 たとえば、このスレッド、 No1479 を見ていないと、何のことだかわかりません。たまたま私が見たときは、上下に並んでいたので「これの続きかな?」と見当をつけることが出来ました。

 『無理矢理っぽい』は、私の読み違いです。失礼しました。DataGrid1 を、フォームをまたいで表示させようとしているのかと思いました。
 『選択した一つの情報だけ返したいのです。』は、「ソースからそれを読み取れ」ということでしょうか?そんなことは、文章として書かれていないですよね?これが「暗黙知」です。
(私はコードを貼り付けられても、読み解くのが面倒なので、ほとんど読みません)


 『選択した一つの情報だけ返したいのです。』についてですが、DataGrid または DataSource としての DataTable ですから、当然複数行あります。複数行の中から1行を絞り込むのは、どのようにして行うのでしょうか。
 また、このフォームオブジェクトの生存期間は、どのようになっているのでしょうか。オブジェクトが破棄されれば、オブジェクトが持っているオブジェクトへのアクセスも出来なくなります。従って、必要な検索結果がどれだけか、というのも、重要になってきます。


※ダイアログとして表示し、1行だけを選択後、「OK」ボタンをクリックする。
※このとき、選択されている1行の情報のみ、返せればよい。

という仕様で、いいのでしょうか?(ソースから読み取った仕様)
 それでしたら、最初のコードでもいいと思います。後は「見えない仕様」との戦いとなるわけで。

 私なら、1行まるまるとってくるか、「列」を指定して取ってくるようにします。表示しなければらならい項目が増えることは、よくあることなので、プロパティとして1つ1つ作るなら、 frm表示 と frm検索 の2つとも変更しなければならないからです。
 1行まるまる持ってくるか、「列」指定出来るようにしておけば、 frm表示 だけ修正すれば、表示する項目が増えたときにも対応できます。
 また、型付けされた DataSet を作成しておけば、行も型付けされます。型付けされれば、データバインドを使うことも出来ます。
___________________________________________________________________
□ written by Jitta on 2005/10/03
http://quick-tips.hp.infoseek.co.jp/ じったのノート
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2004-Sept.2006

0
引用返信 編集キー/
■1509 / inTopicNo.6)  Re[5]: プロジェクト間〜の続きで
□投稿者/ ヘルプ 准尉(29回)-(2005/10/04(Tue) 09:20:41)

分類:[VB.NET] 

No1502に返信(Jittaさんの記事)
お返事ありがとうございます。
> ※ダイアログとして表示し、1行だけを選択後、「OK」ボタンをクリックする。
> ※このとき、選択されている1行の情報のみ、返せればよい。
>
> という仕様で、いいのでしょうか?(ソースから読み取った仕様)

はい、その通りです。

>  私なら、1行まるまるとってくるか、「列」を指定して取ってくるようにします。表示しなければらならい項目が増えることは、よくあることなので、プロパティとして1つ1つ作るなら、 frm表示 と frm検索 の2つとも変更しなければならないからです。
>  1行まるまる持ってくるか、「列」指定出来るようにしておけば、 frm表示 だけ修正すれば、表示する項目が増えたときにも対応できます。
>  また、型付けされた DataSet を作成しておけば、行も型付けされます。型付けされれば、データバインドを使うことも出来ます。

列を指定した場合は列の値を取る→frm表示の各箇所に指定表示できるということなのでしょうか?それは考えにはあたのですが、やり方がいまいちわからなくて(涙)。出来ればやり方などを教えていただくとうれしいのですが。
よろしくお願いします。

0
引用返信 編集キー/
■1513 / inTopicNo.7)  Re[6]: プロジェクト間〜の続きで
□投稿者/ Jitta 中尉(35回)-(2005/10/04(Tue) 21:28:03)

分類:[VB.NET] 

 えっと、私は掲示板での回答を、全くの善意、全くのボランティアでやっているわけではありません。私にとって学ぶものがあるので、やっています。

 たとえば、今回の場合、No1479 の方で、「プロジェクト間でデータをやりとりする」という問題だと思ったので、おもしろそうなので出てきました。

 なので、MSDN を見ればわかるような問題は、「読んだの?」としか返しません。

 先に「DataSet」「行」「列」「DataTable」というキーワードを上げています。MSDN で、「System.Data 名前空間」を見ると、
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemData.asp
DataColumn クラス
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemdatadatacolumnclasstopic.asp
DataRow クラス
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemdatadatarowclasstopic.asp
が見つかります。このうち、『1行まるまる持ってくる』と書いていますから、「行」の方を見ればよい、ということがわかると思いました。

 そこで、DataRow クラスを見ると、新しい行を作って、新しい行の列に値を入れているサンプルコードが掲載されています。ということは、取り出すには、代入と反対のことをすればいいと思いますが、どうでしょうか?
 または、メンバ一覧を見ると、
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemdatadatarowmemberstopic.asp
『オーバーロード。 指定した列に格納されているデータを取得または設定します。』というItem プロパティがあります。これの説明も合わせてみると、わかると思うのですが。。。


 それとも、それを見てもわからなかったのでしょうか?そうであるなら、大変興味のある事例です。Microsoft に対して、MSDN の改善要求を出しますから、どうぞ、どこをどのように理解してわからなかったのか、教えてください。

 とにかく、私の投稿を読んで、あなたが投稿するまでの間にしたことを教えてください。それが私が要求する、私の情報に対する対価です。
___________________________________________________________________
□ written by Jitta on 2005/10/04
http://quick-tips.hp.infoseek.co.jp/ じったのノート
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2004-Sept.2006

0
引用返信 編集キー/
■1516 / inTopicNo.8)  Re[7]: プロジェクト間〜の続きで
□投稿者/ ヘルプ 少尉(30回)-(2005/10/05(Wed) 09:15:28)

分類:[VB.NET] 

ご返答ありがとうございました。そこまで調べがいってませんでしたo(m_m)oリンクに行ってみて調べて見ます。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -