出産前後の痔にはご注意!

vb2005で開発を行っています。
調べたのですが、DataGridのことばかりでDataGridViewの話題はあまりなかったので質問させて下さい。
DataGridViewで特定のカラムの表示形式を和暦(平成YY年MM月DD日)にしたいのですが、いざ出力してみると西暦YY年MM月DD日という形式になってしまいます。
以下がコードです。

Imports System.Data.OleDb
Imports System.Globalization
Imports System.Text.RegularExpressions
Imports System.Text

Private Sub PunchDataInq_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

' DataGrid view を和暦表示に
Dim culture As New CultureInfo("ja-JP", True)
culture.DateTimeFormat.LongDatePattern = "ggyy'年'MM'月'dd'日'"
Me.dgv.Columns(0).DefaultCellStyle.Format = culture.DateTimeFormat.LongDatePattern
End Sub
----------------------------------------------------------

この状態でDate型の値をDBから参照すると西暦07年11月06日などが表示されてしまいます。どなたかお気づきの点がございましたらぜひご指摘ください。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

コントロールパネルで暦が西暦を使うになっているとそのような現象が起きるようです


WinXPの場合 『地域と言語のオプション』の『カスタマイズ』の『日付タブ』の『カレンダーの種類』が西暦系になっていると起きるようです

対策としては アプリケーションのCultureInfo新規に作成してしまう方法です
フォームのLoadイベントなどで
Dim myCI as New CultureInfo("Ja-jp")
Dim myDTFmtInfo as DateTimeFormatInfo = myCI.DateTimeFormat
Dim jpCal as New JapaneseCalender
myDTFmtInfo.Calender = jpCal
myCI.DateTimeFormat = myDTFmtInfo
Application.CurrentCulture = myCI
と言った具合です
    • good
    • 0
この回答へのお礼

ご親切にありがとうございました。
返事の方法の通りで解決しました。PCを調べてみたところ、やはり西暦を使うようになってました。こんな抜け道があるんですね、大変勉強になりました。

お礼日時:2007/11/08 11:02

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

Q和暦表示

VB.NET2010を使用しています。

データグリッド上にある日付型のカラムを和暦で表示するにはどうすればいいのでしょうか?
DefaultCellStyleにgggee年yy月mm日とやっても平成○○とならず西暦○○となってしまいます。

Aベストアンサー

多分Windowsの日付の設定が 『西暦(日本語)』になっているのだと思います
コントロールパネルから変更するか Application.CurrentCultureを変更する必要があるでしょう

コントロールパネルから変更すれば gggee年 で 平成23年になります
CurrentCulture変更する場合は gggyy年 という具合にしないとまずいみたいです


FormのLoadイベントか Newメソッドで
  ' cultureInfoを生成
  Dim cul As New Globalization.CultureInfo("ja-JP")
  ' カレンダーを和暦に変更
  cul.DateTimeFormat.Calendar = New Globalization.JapaneseCalendar
  ' アプリの規定のカルチャーを変更する
  Application.CurrentCulture = cul

といった手順です

QDataGridViewでyyyy/MM/dd

SQLServer2008で作ったデータベースをVB2010のDataGridViewで表示させております。

DataGridViewで日付列を"yyyy/MM/dd"のスラッシュ入り10桁で表示させたいのですが表示されません。
データベース側でのデータ型は「date」となっております。

DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy/MM/dd"
こう記述すればいいと思ったのですが、「20111227」とスラッシュ無しで表示されてしまいます。

DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy年MM月dd日"
これは「2011年12月27日」と表示することを確認できました。

DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy-MM-dd"
これは「2011-12-27」と表示することを確認できました。

どのようにしたら"yyyy/MM/dd"形式で表示させることが出来るのでしょうか
指導のほど、よろしくお願い致します。

SQLServer2008で作ったデータベースをVB2010のDataGridViewで表示させております。

DataGridViewで日付列を"yyyy/MM/dd"のスラッシュ入り10桁で表示させたいのですが表示されません。
データベース側でのデータ型は「date」となっております。

DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy/MM/dd"
こう記述すればいいと思ったのですが、「20111227」とスラッシュ無しで表示されてしまいます。

DataGridView1.Columns("日付").DefaultCellStyle.Format = "yyyy年MM月dd日"
これは「2011年12...続きを読む

Aベストアンサー

"yyyy\/MM\/dd"で出来ませんか。
あるいは
'yyyy/MM/dd'

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

Q【VB】コンボボックスにデータベースから取り出した値を入れたい

VB2005です。

表題の通りですがやり方がよくわかりません。
データベースに接続し、
SQLで重複しない値を取り出すところまではできています。

SQL=SELECT DISTINCT FieldName FROM TableName

VB6の時はこんなソースでした
Do Until rs.EOF
   Combo1.AddItem.Fields("FieldName")
   rs.MoveNext
Loop

VB2005ではどう書くのでしょう?
よろしくご教授ください。

Aベストアンサー

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", dbFilePath)
  Dim sql As String = "SELECT DISTINCT FieldName FROM TableName"
  Dim conn As New OleDbConnection(connectionString)
  Dim query As New OleDbCommand(sql, conn)

  Try
    conn.Open()
    Dim reader As OleDbDataReader = query.ExecuteReader()
    While (reader.Read())
      Me.ComboBox1.Items.Add(reader.Item("FieldName"))
    End While
    reader.Close()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  Finally
    conn.Close()
  End Try

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Sourc...続きを読む

QVB.NETのコンボボックスについて

VB6からVB.NETでプログラミングを始めました。
コンボボックスのクリアの仕方や設定の仕方、また
取り出し方等を教えて下さい。

色々とヘルプも見てみたのですが、よく解りません。
宜しくお願い致します。

Aベストアンサー

クリアだけだと思ってました。
追記します。

Itemを操作します


'登録
For i = 1 To 10
  Me.ComboBox1.Items.Add(i.ToString)
Next

'取得
For i = 0 To Me.ComboBox1.Items.Count - 1
  MsgBox(Me.ComboBox1.Items(i).ToString)
Next

'完全クリア
Me.ComboBox1.Items.Clear()

部分クリア
Me.ComboBox1.Items.RemoveAt(Index値)

QDataGridViewでセルクリックイベントを発生させるには

DataGridViewでセルクリックイベントを発生させるには、
デザイナからではCellClickイベントハンドラとなりますが、
プログラムコード上から発生させるにはどのようにすればよろしいでしょうか?

CurrentCellでアクティブセルを変更した時に、そこのセルをクリックさせるイベントが欲しいのですが・・

宜しくお願い致します。

Aベストアンサー

CellClickイベントハンドラの内容を別のメソッドとして作り、アクティブセルを変更した際にそのメソッドを呼び出す方法ではダメなのでしょうか?
どうしてもCellClickイベントを発生させて処理をしたいのでしょうか?

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分


人気Q&Aランキング