VB.NETのデータグリッドの利用方法についてお聞かせください。


(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のコード内容をどう修正すべきか,ご教授願えますでしょうか。
よろしくお願いします。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2010/07/11 19:28:23
  • 終了:2010/07/18 19:30:02

ベストアンサー

id:mj99 No.1

mj99回答回数138ベストアンサー獲得回数382010/07/14 18:32:09

ポイント60pt

コメント欄掲載のプログラムについて、悪いのは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の派生クラスの上に貼らないと正しく動作できないようです。

id:language_and_engineering

本当にありがとうございます。ご提示いただいたコードのおかげで,ブラウザ上でDataGridを動作させることができました。いま,動作する実物を見て感動しております。情報が少ないにもかかわらず調査してくださったことを感謝します。

2010/07/16 09:47:35
  • id:language_and_engineering
    a.vbの内容です。



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

  • id:language_and_engineering
    補足情報

    ブラウザ上でVB.NETのコードを動かす (IE上で.NETアプリケーションをホストする方法の続き)
    http://d.hatena.ne.jp/language_and_engineering/20100711/p1

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません