お世話になります。
VISTA(VB2008 SQLSERVER2005)でプログラムを開発しています、
戸惑ってしまい教えて頂きたく投稿しました。
フォームにコマンドボタンとデータグリッドビューを貼り付け
ボタンをクリックすることにより、得意先売上額順に得意先名を
データグリッドビューに表示するプログラムを作っています。
SQLデータベースの型
得意先売上額 varchar(9) 得意先名 varchar(40)
※問題の現象
得意先売上額セルのカンマ編集が出来ません。
得意先売上額をnumeric(9,0)にすると編集されるのですが、
作成したプログラム資産の関係により今からの型変更は難しいのです。
データテーブルの値をデータソースにセットする前に、型変換するなど
して解決できないでしょうか?
いろいろと考えましたが解決できません、よろしくお願いします。
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Using cn As New SqlConnection(My.Settings.SqlConnectionString)
cn.Open()
Dim sql As String
Dim table As New DataTable
sql = "SELECT 得意先売上額,得意先名 FROM 得意先 ORDER BY 得意先売上額"
Dim Adapter As New SqlDataAdapter(sql, cn)
Adapter.Fill(table)
DataGridView1.DataSource = table
DataGridView1.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
DataGridView1.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
DataGridView1.Columns(0).DefaultCellStyle.Format = "###,###,##0"
DataGridView1.Columns(0).Width = 120
DataGridView1.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft
DataGridView1.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
DataGridView1.Columns(1).Width = 200
End Using
End Sub
End Class
表示のみの目的であれば、SQL の時点で
http://yaplog.jp/orator/archive/38
のようにして、文字列として取得してやれば良いかと。
あるいは、DataTable 側に式列を追加するとか。
table.Columns.Add("額", GetType(Decimal), "CONVERT(得意先売上額, System.Decimal)").SetOrdinal(0)
table.Columns("得意先売上額").SetOrdinal(2)
DataGridView1.DataSource = table
DataGridView1.Columns(2).Visible = False
DataGridView1.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
DataGridView1.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
DataGridView1.Columns(0).DefaultCellStyle.Format = "###,###,##0"
DataGridView1.Columns(0).Width = 120
DataGridView1.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft
DataGridView1.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
DataGridView1.Columns(1).Width = 200
もしくは、Decimal 型の列を持った DataTable に転写するとか。
Dim dummyTable As DataTable = table.Clone()
dummyTable.Columns("得意先売上額").DataType = GetType(Decimal)
Using stm As New MemoryStream()
table.WriteXml(stm)
stm.Flush()
stm.Seek(0, SeekOrigin.Begin)
dummyTable.ReadXml(stm)
stm.Seek(0, SeekOrigin.End)
stm.Close()
End Using
DataGridView1.DataSource = dummyTable
魔界の仮面弁士さんご回答ありがとうございます。
色々解決策があるんですね、驚きました。
2番目の方法で解決しました、ありがとうございます。
ツイート | ![]() |