VB.NETでアクセスのデータをグリッドで表示しているのですが
列ごとに幅を変える方法がわかりません
過去ログをみたところ
DataGrid1.Columns(index).Width=10
という形式で変えれるとあったのですが
ColumnsはDataGridのメンバではありませんとなってしまいます
どうすれば列ごとに幅を設定できるのでしょうか
>過去ログをみたところ
> DataGrid1.Columns(index).Width=10
>という形式で変えれるとあったのですが
>ColumnsはDataGridのメンバではありませんとなってしまいます
それは[VB6.0]の DataGrid の話でしょうね。
過去ログを『幅』で検索してみました。↓こっちを試してみてはどうでしょう。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200304/03040066.txt
すいません、リンク先をみたりいろいろやってみたんですが
初心者ゆえ全然わかりません(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
全然違う気がします
ボクもそのうち時間をかけて調べようと思ってチェックしてただけなんで
全然分かりませんw。
…とりあえず1時間ほどやってみましたが…過去ログの通り
1.カラムを全て自分で用意する。
2.DataSet を設定する。
の条件付で成功しました。
SQLUtility.ExecuteQuery(Byval SqlText As String)関数の
中でどうやってるのか分かりませんが、DataTable の形にして
しまってからの設定はちゃんと調べないと分かりませんね。うん。
そのうち調べようとは思ってますが、いつになるか…
他の方の回答を待っていただいた方が早いかもしれません。
あ、もちろん DataTable から DataSet 作れば出来ますけどね。
編集 削除あ…これで動きません?
たぶん、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
色々調べてくださり本当にありがとうございます
特攻隊長まるるうさんの最後に書いてくださったコードをためしたところ
System.NullReferenceException:オブジェクト参照がオブジェクトインスタンスに設定されていません。
というエラーがでてしまいます(T_T)
やはり
1.カラムを全て自分で用意する。
2.DataSet を設定する。
という方法でしかできないのですかね…
このやり方を調べてみます
あれ?どこでインスタンス生成してないんだろ?
どこでエラー出てます?場所も書いてってば、止まった場所!
> 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
できましたぁ!!!
ありがとうございます!
実際には特攻隊長まるるうさんの10:30頃のコードでできました
("コード")の"ー"の部分が"−"になってしまっていたために
うまくいかなかっただけでした
つまらないミスで二度手間かけさせてしまい申し訳ありませんでした
本当に助かりました
解決です!