VB.NETでグリッドの幅を変えるには?

解決


みんち  2004-04-21 14:37:56  No: 112911  IP: [192.*.*.*]

VB.NETでアクセスのデータをグリッドで表示しているのですが
列ごとに幅を変える方法がわかりません
過去ログをみたところ
  DataGrid1.Columns(index).Width=10
という形式で変えれるとあったのですが
ColumnsはDataGridのメンバではありませんとなってしまいます
どうすれば列ごとに幅を設定できるのでしょうか

編集 削除
特攻隊長まるるう  2004-04-21 15:08:48  No: 112912  IP: [192.*.*.*]

>過去ログをみたところ
>  DataGrid1.Columns(index).Width=10
>という形式で変えれるとあったのですが
>ColumnsはDataGridのメンバではありませんとなってしまいます
それは[VB6.0]の DataGrid の話でしょうね。
過去ログを『幅』で検索してみました。↓こっちを試してみてはどうでしょう。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200304/03040066.txt

編集 削除
みんち  2004-04-21 16:20:24  No: 112913  IP: [192.*.*.*]

すいません、リンク先をみたりいろいろやってみたんですが
初心者ゆえ全然わかりません(TT)
大雑把にかくと下記のようなコードになるのですが
どこがまずいのかもわかりません

Private Data As System.Data.DataTable

Dim util As SQLUtility = New SQLUtility
Dim sql As String
Dim ts As New DataGridTableStyle

ts.MappingName = "DataTable1"

'SQL作成
sql = "select CODE as コード from MST_TABLE"
'SQL実行
Data = util.ExecuteQuery(sql)
'グリッドに入力
DataGrid1.TableStyles.Add(ts)
DataGrid1.DataSource = Data
DataGrid1.TableStyles("DataTable1").GridColumnStyles("コード").Width = 100
If (DataGrid1.CurrentRowIndex > -1) Then
    DataGrid1.UnSelect(DataGrid1.CurrentRowIndex)
End If

全然違う気がします

編集 削除
特攻隊長まるるう  2004-04-22 09:49:40  No: 112914  IP: [192.*.*.*]

ボクもそのうち時間をかけて調べようと思ってチェックしてただけなんで
全然分かりませんw。

…とりあえず1時間ほどやってみましたが…過去ログの通り
1.カラムを全て自分で用意する。
2.DataSet を設定する。

の条件付で成功しました。
SQLUtility.ExecuteQuery(Byval SqlText As String)関数の
中でどうやってるのか分かりませんが、DataTable の形にして
しまってからの設定はちゃんと調べないと分かりませんね。うん。
そのうち調べようとは思ってますが、いつになるか…
他の方の回答を待っていただいた方が早いかもしれません。

編集 削除
特攻隊長まるるう  2004-04-22 10:05:23  No: 112915  IP: [192.*.*.*]

あ、もちろん DataTable から DataSet 作れば出来ますけどね。

編集 削除
特攻隊長まるるう  2004-04-22 10:33:16  No: 112916  IP: [192.*.*.*]

あ…これで動きません?
たぶん、DataTable を作った時点で TableName が "" に勝手になっちゃってます。
[VB.NET2003]
Option Explicit On 

Private Data As System.Data.DataTable

    Private Sub Test()
        Dim util As SQLUtility = New SQLUtility()
        Dim sql As String
        Dim ts As New DataGridTableStyle()

        'SQL作成
        sql = "select CODE as コード from MST_TABLE"
        'SQL実行
        Data = util.ExecuteQuery(sql)
        'グリッドに入力
        ts.MappingName = Data.TableName
        DataGrid1.TableStyles.Add(ts)
        DataGrid1.DataSource = Data
        DataGrid1.TableStyles(Data.TableName).GridColumnStyles("コード").Width = 100
        If (DataGrid1.CurrentRowIndex > -1) Then
            DataGrid1.UnSelect(DataGrid1.CurrentRowIndex)
        End If
    End Sub

編集 削除
みんち  2004-04-22 15:07:05  No: 112917  IP: [192.*.*.*]

色々調べてくださり本当にありがとうございます
特攻隊長まるるうさんの最後に書いてくださったコードをためしたところ

System.NullReferenceException:オブジェクト参照がオブジェクトインスタンスに設定されていません。

というエラーがでてしまいます(T_T)

やはり
1.カラムを全て自分で用意する。
2.DataSet を設定する。
という方法でしかできないのですかね…
このやり方を調べてみます

編集 削除
特攻隊長まるるう  2004-04-22 16:01:46  No: 112918  IP: [192.*.*.*]

あれ?どこでインスタンス生成してないんだろ?
どこでエラー出てます?場所も書いてってば、止まった場所!
> Private Data As System.Data.DataTable
Private Data As New System.Data.DataTable
こうかな?…でもこれってみんちさんのソースコードそのままだし…

>1.カラムを全て自分で用意する。
>2.DataSet を設定する。
>という方法でしかできないのですかね…
テーブルの MappingName さえしっかり設定できていれば
必要ないことが確認できました。
ts.MappingName = Data.TableName
がうまくいってれば DataTable で可能です。
…う〜ん。""がまずいかなぁ…。名前付けましょうか?

[VB.NET2003]
Option Explicit On 

    Private Data As New System.Data.DataTable
    Private Const DummyTableName As String = "DummyTable"

    Private Sub Test()
        Dim util As SQLUtility = New SQLUtility()
        Dim sql As String
        Dim ts As New DataGridTableStyle()

        'SQL作成
        sql = "select CODE as コード from MST_TABLE"
        'SQL実行
        Data = util.ExecuteQuery(sql)
        Data.TableName = DummyTableName

        'グリッドに入力
        ts.MappingName = Data.TableName
        DataGrid1.TableStyles.Add(ts)
        DataGrid1.DataSource = Data
        DataGrid1.TableStyles(Data.TableName).GridColumnStyles("コード").Width = 100
        If (DataGrid1.CurrentRowIndex > -1) Then
            DataGrid1.UnSelect(DataGrid1.CurrentRowIndex)
        End If
    End Sub

編集 削除
みんち  2004-04-22 16:27:27  No: 112919  IP: [192.*.*.*]

できましたぁ!!!
ありがとうございます!

実際には特攻隊長まるるうさんの10:30頃のコードでできました
("コード")の"ー"の部分が"−"になってしまっていたために
うまくいかなかっただけでした
つまらないミスで二度手間かけさせてしまい申し訳ありませんでした
本当に助かりました

解決です!

編集 削除