(1)a.vbというコードを保存します。(内容はコメント欄を参照)
(2)C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
上に前項のソースを置いて,
vbc /target:library /reference:"System.Windows.Forms.dll" /reference:"System.dll" /reference:"System.Data.dll" /reference:"System.XML.dll" /reference:"System.Drawing.dll" a.vb
とコンパイルします。
a.dllが生成されます。
(3)Apacheの公開ディレクトリに,前項のa.dllを配置します。
同じフォルダ上に,以下のHTMLを配置します。
hoge.html
----
<html>
<body>
<object id="fuga" height="300" width="300"
classid="a.dll#SampleNameSpace.SampleDataGrid"></object>
</body>
</html>
----
(4)IEで,http://localhost/hoge.html にアクセスします。
(5)データグリッドが表示されてほしかったのですが,
http://f.hatena.ne.jp/language_and_engineering/20100711191940
のような画面が出るだけでした・・・・。
要は,http://d.hatena.ne.jp/language_and_engineering/20100705/p1 のDataGrid版をやりたいのですが,
そのためにa.vbのコード内容をどう修正すべきか,ご教授願えますでしょうか。
よろしくお願いします。
コメント欄掲載のプログラムについて、悪いのはDataTableが初期化されていないところだけのようです。
が、それとは別の問題も、、、
----
■a.vb
Imports System.Data Namespace SampleNameSpace Public Class SampleControl Inherits System.Windows.Forms.DataGrid Public Sub New() Dim dtSet As DataSet = New DataSet("hoge") Dim dtTable As DataTable = dtSet.Tables.Add("t_hoge") dtTable.Columns.Add("ID", GetType(System.Int32)) dtTable.Columns.Add("NAME", GetType(System.String)) dtTable.Rows.Add(New Object() {1, "aaaaaa"}) dtTable.Rows.Add(New Object() {2, "bbbbbb"}) dtTable.Rows.Add(New Object() {3, "cccccc"}) Me.SetDataBinding( dtSet, "t_hoge" ) End Sub End Class Public Class SampleForm Inherits System.Windows.Forms.UserControl Dim ctl As New SampleControl() Public Sub New() Me.Controls.Add(Me.ctl) End Sub End Class End Namespace
■a.htm
<html> <body> <object id="fuga1" classid="a.dll#SampleNameSpace.SampleControl"></object> <object id="fuga2" classid="a.dll#SampleNameSpace.SampleForm"></object> </body> </html>
SampleControlクラスをHTMLに貼ってもデータは表示されません。
SampleFormクラスをHTMLに貼るとデータは表示れます。
詳しく調べたわけではありませんが、DataGridクラスは、System.Windows.Forms.ContainerControlの派生クラスの上に貼らないと正しく動作できないようです。
------
Imports System.Type
Imports System.Data
Namespace SampleNameSpace
' HTML上でデータグリッドを表示するためのクラス。
Public Class SampleDataGrid
Inherits System.Windows.Forms.DataGrid
' コンストラクタ
' 初回表示時のセットアップを行なう。
Public Sub New()
' データグリッド自体のスタイルを設定する。
Me.DataMember = ""
Me.Font = New System.Drawing.Font("MS UI Gothic", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(128, Byte))
Me.HeaderForeColor = System.Drawing.SystemColors.ControlText
Me.Location = New System.Drawing.Point(8, 8)
Me.Name = "DataGrid1"
Me.Size = New System.Drawing.Size(200, 200)
Me.TabIndex = 0
' データグリッド上に表示するデータを用意する。
Dim dtSet As DataSet = New DataSet("hoge")
Dim dtTable As DataTable
Dim pkCol As DataColumn
pkCol = dtTable.Columns.Add( "ID", GetType(System.Int32) )
dtTable.Columns.Add( "NAME", GetType(System.String) )
dtTable.PrimaryKey = New DataColumn() { pkCol }
dtTable.Rows.Add( New Object() { 1, "aaaaaa" } )
dtTable.Rows.Add( New Object() { 2, "bbbbbb" } )
dtTable.Rows.Add( New Object() { 3, "cccccc" } )
' データグリッド上に実際にデータを表示する。
Me.SetDataBinding( dtSet, "t_hoge" )
End Sub
End Class
End Namespace
------
ブラウザ上でVB.NETのコードを動かす (IE上で.NETアプリケーションをホストする方法の続き)
http://d.hatena.ne.jp/language_and_engineering/20100711/p1