Gridに日付を表示する方法

このQ&Aのポイント
  • Gridに日付を正しく表示させる方法についてアドバイスをお願いします。
  • 現在のソースでは、日付の表示が間違っています。正しい表示方法を教えてください。
  • 「2006/05/10 13:00:00」と表示させるためには、どのように修正すればよいでしょうか。
回答を見る
  • ベストアンサー

Gridに日付を入れるとき

Gridに「2006/05/10 13:00:00」と表示させたいのですが、「2006/05/10」と表示されてしまいます。 ------------------------------------------------ Dim dt As DataTable Dim dtSet As New DataSet dt = dtSet.Tables.Add("aaa") dt.Columns.Add("日付", Type.GetType("System.DateTime")) dt.Rows.Add(New Object() {"2006/05/10 14:00:00"}) DataGrid1.DataSource = dt ------------------------------------------------ ソースが間違っているのでしょうか。どなたかアドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>他に方法ってないですか? おそらく無いかと思います。 極力シンプルにしたいのであれば、関数化してあげると、メイン部のコードが多少ダイエットできると思います。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load   Dim dt As New DataTable("aaa")   Dim dc1 As New DataColumn("日付1", Type.GetType("System.DateTime"))   Dim dc2 As New DataColumn("日付2", Type.GetType("System.DateTime"))   dt.Columns.AddRange(New DataColumn() {dc1, dc2})   dt.Rows.Add(New Object() {"2006/05/10 14:00:00", "2006/05/11 14:00:00"})   DataGrid1.DataSource = dt   Dim ts As New DataGridTableStyle()   ts.MappingName = dt.TableName   ts.GridColumnStyles.Add(取得_TextBoxColumn(dc1))   ts.GridColumnStyles.Add(取得_TextBoxColumn(dc2, 120))   DataGrid1.TableStyles.Add(ts) End Sub 'サイズ自動バージョン Private Function 取得_TextBoxColumn(ByVal p_dc As DataColumn) As DataGridTextBoxColumn   Return 取得_TextBoxColumn(p_dc, -1) End Function 'サイズ設定バージョン Private Function 取得_TextBoxColumn(ByVal p_dc As DataColumn, ByVal p_width As Integer) As DataGridTextBoxColumn   Dim l_ret As New DataGridTextBoxColumn()   With l_ret     .MappingName = p_dc.ColumnName     .HeaderText = p_dc.ColumnName     .Format = "yyyy/MM/dd hh:mm:ss"     .Width = p_width   End With   Return l_ret End Function もっとシンプルにさせようとすると、別クラスを起こし、データグリッドを継承したオリジナルのコントロールを作成する方法が思いつきます。 あくまでも私の場合ですが、、、 ・まだ他にグリッドに機能を持たせる恐れがあるのであれば、継承クラスを作成する ・この画面のみで利用する機能であれば、継承クラスを作成するまでもなし という判断を行います。 どの様な創りがベストかは、全体設計から判断をされたらよいと思います。

fuchir
質問者

お礼

分かりました。 >全体設計から判断をされたらよいと思います。 そうですね。全体設計からベストな方法を考えて見ます ご回答ありがとうございます。

その他の回答 (1)

回答No.1

DataGridTextBoxColumn クラスを利用します http://okwave.jp/kotaeru.php3?q=2062060 http://dobon.net/vb/dotnet/datagrid/columnformat.html http://dobon.net/vb/dotnet/datagrid/columnwidth.html Dim dt As New DataTable("aaa") Dim dc As New DataColumn("日付", Type.GetType("System.DateTime")) dt.Columns.Add(dc) dt.Rows.Add(New Object() {"2006/05/10 14:00:00"}) DataGrid1.DataSource = dt Dim cs As New DataGridTextBoxColumn() cs.MappingName = dc.ColumnName cs.HeaderText = dc.ColumnName cs.Width = 120 cs.Format = "yyyy/MM/dd hh:mm:ss" Dim ts As New DataGridTableStyle() ts.MappingName = dt.TableName ts.GridColumnStyles.Add(cs) DataGrid1.TableStyles.Add(ts)

fuchir
質問者

補足

できました。ありがとうございました。 この場合、もう一つ同じような列を増やしたいときは ------------------------------------------------- Dim dt As New DataTable("aaa") Dim dc1 As New DataColumn("日付1", Type.GetType("System.DateTime")) dt.Columns.Add(dc1) Dim dc2 As New DataColumn("日付2", Type.GetType("System.DateTime")) dt.Columns.Add(dc2) dt.Rows.Add(New Object() {"2006/05/10 14:00:00","2006/05/11 14:00:00"}) DataGrid1.DataSource = dt Dim ts As New DataGridTableStyle() ts.MappingName = dt.TableName '「日付1」の設定 Dim cs As New DataGridTextBoxColumn() cs.MappingName = dc1.ColumnName cs.HeaderText = dc1.ColumnName cs.Width = 120 cs.Format = "yyyy/MM/dd hh:mm:ss" ts.GridColumnStyles.Add(cs) DataGrid1.TableStyles.Add(ts) '「日付2」の設定 cs = New DataGridTextBoxColumn() cs.MappingName = dc2.ColumnName cs.HeaderText = dc2.ColumnName cs.Width = 120 cs.Format = "yyyy/MM/dd hh:mm:ss" ts.GridColumnStyles.Add(cs) DataGrid1.TableStyles.Add(ts) ------------------------------------------------ のようにすれば、列の追加が出来たのですが、他に方法ってないですか? ソースが汚くてすみません。

関連するQ&A

  • データベースのDataRowの使い方について

    環境: Windows7 MicrosftVisualStudio 2013 SQLServer 2014 言語 C# .Net 通常以下のようにしてDataRowを作って使用しますが、 DataSet ds = new DataSet(); DataTable dt = new DataTable("Table1"); dt.Columns.Add("商品番号"); dt.Columns.Add("商品名"); dt.Columns.Add("価格"); ds.Tables.Add(dt); DataRow datarow = ds.Tables["Table1"].NewRow(); データソースと同じ列を使用したいので データセット  : MAINDataSet データテーブル : MASTERDataTable MAINDataSet.MASTERDataTable dtMaster = new MAINDataSet.MASTERDataTable(); として新規作成を行ったのですが、このままではレコード数が0で、上記の DataRow datarow = dataset.Tables["Table1"].NewRow(); にあたる処理 DataRow dr = MAINDataSet.MASTERDataTable.NewRow(); がわかりません。 現状では この1行の代わりに以下のようなことを毎回しなければ ならないのでしょうか? MAINDataSet.MASTERDataTable dt = new MAINDataSet.MASTERDataTable(); DataSet ds = new DataSet(); DataTable dt = new DataTable("Table1"); for(int inum = 0; inum < dt.Columns.Count; inum++) { dt.Columns.Add(dt.Columns[inum].ColumnName); } ds.Tables.Add(dt); DataRow datarow = ds.Tables["Table1"].NewRow();

  • DataGridViewに関して

    開発:Visual Basic 2008 考え方の質問になってしまうかもしれませんが教えて下さい。 Datagridviewを用いて、データの入力をさせたいと考えています。 但し、入力だけでなく画面にある表示ボタンを押した際には、テーブルに格納されている データを検索しに行き、その内容を表示させたいと考えています。 Datagridviewはフォームに貼り付け、各項目を一つずつ作成してあります。 しかし、この場合、以下のような記述をすると(そもそも記述が違うかと思われますが・・・)、 もともと作成してある項目(列)にデータがセットされず、新規で列を作ってしまいます。 《記述内容》 '変数の宣言 Dim dtSet As DataSet = New DataSet("PRODUCTS") Dim dtTable As DataTable 'データセットにテーブルを追加する dtTable = dtSet.Tables.Add("A_TBL") 'テーブルにフィールドを追加する '.Add("フィールド名", フィールドの型)で追加します dtTable.Columns.Add("AAA", Type.GetType("System.String")) Dim data_row As DataRow = dtTable.NewRow() data_row("AAA") = PIN_AAA dtTable.Rows.Add(data_row) 'DataGridにデータを表示する G_BBB.DataSource = dtSet.Tables(0) そもそもDatagridviewを用いて、入力や表示を行うにはどのような形にするのが 良いのでしょうか? Datasetとか使う? 教えて頂きたいと思います。 よろしくお願いします。

  • 【ASP.NET】DataSetをSqlDataSourceに組み込めますか?

    ASP.NET Visual Studio 2005で開発を行っています。 GridViewのページングの機能を使用するには、「SqlDataSource」や「ObjectDataSource」を使用しないと有効にならないと思いますが、データベースがDataSetになっています。 この状態から、GridViewにデータをバインドし、ページングを有効にさせるには、どうしたらよいでしょうか?? SqlDataSourceにDataSetを持っていくという方法が調べても、分かりませんでした。 以下が使用しているソースです。 これですと、ページングが有効にならず、エラーになる状態です。 ============================================= Dim dSet As Data.DataSet = New Data.DataSet("データ") Dim dTbl As Data.DataTable Dim dRow As Data.DataRow dTbl = dSet.Tables.Add("データ") dTbl.Columns.Add("aaa", Type.GetType("System.String")) dRow = dTbl.NewRow() dRow("aaa") = "bbb" dTbl.Rows.Add(dRow) Me.GridView1.DataSource = dTbl Me.GridView1.DataBind() ====================================== どうぞ、宜しくお願いします。

  • DataSet(DataTable)の使い方

    GridViewやListViewなどに動的にデータを追加していきたいので、 DataTableを使おうと思いました。 下記、(1)のようにPageLoadイベントで1行追加することはできたのですが、 ボタンを押すごとに、1行ずつ追加していきたいので(2)のように修正したのですが、 ボタンを押したときのポストバックで、DataSetもDataTableもnullになってしまい、 行の追加ができません。 ボタンを押すごとにどんどん行を追加していきたいのですが、このような場合は どのようにDataSetもDataTableを保持しておけば良いのでしょうか。 (1) public partial class WebForm1 : System.Web.UI.Page { int count = 0; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataSet dS = new DataSet("dS"); DataTable dT = new DataTable("dT"); // データテーブル カラム作成 dT.Columns.Add("no", typeof(int)); dT.Columns.Add("name", typeof(string)); dT.Columns.Add("kind", typeof(string)); dT.Columns.Add("time", typeof(int)); dS.Tables.Add(dT); DataRow dR = dT.NewRow(); dR["no"] = count; dR["name"] = count.ToString(); dR["kind"] = count.ToString(); dR["time"] = count; dT.Rows.Add(dR); // リストビュー データソース選択 ListView2.DataSource = dS; ListView2.DataBind(); } } } (2) public partial class WebForm2 : System.Web.UI.Page { int count = 0; DataSet dS; DataTable dT; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { dS = new DataSet("dS"); dT = new DataTable("dT"); // データテーブル カラム作成 dT.Columns.Add("no", typeof(int)); dT.Columns.Add("name", typeof(string)); dT.Columns.Add("kind", typeof(string)); dT.Columns.Add("time", typeof(int)); dS.Tables.Add(dT); } } protected void Button1_Click(object sender, EventArgs e) { count = count + 1; DataRow dR = dT.NewRow(); dR["no"] = count; dR["name"] = count.ToString(); dR["kind"] = count.ToString(); dR["time"] = count; dT.Rows.Add(dR); // リストビュー データソース選択 ListView2.DataSource = dS; ListView2.DataBind(); } }

  • C# DataGridViewにデータを追加したい。

    C# DataGridViewにデータを追加したい。 DataGridViewにレコードを追加したいのですが、Formのロードイベントで以下コードを実行しています。 // テーブルを作成 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1 = dataSet1.Tables.Add("製品テーブル"); DataColumn dataClumn1 = dataTable1.Columns.Add("ID", typeof(int)); DataColumn dataClumn2 = dataTable1.Columns.Add("名前", typeof(int)); // テーブルにデータを追加 dataTable1.Rows.Add(new Object[] { 1, name1}); dataTable1.Rows.Add(new Object[] { 2, name2}); dataGridView1.DataSource = dataTable1; としています。 Formにボタンを配置し、ボタンクリック時にテキストボックス[txtProName]のデータを レコード追加したいのですが、記入の仕方がわかりません。 まず、 DataSet dataSet1 = new DataSet("商品マスター"); DataTable dataTable1 = dataSet1.Tables.Add("製品テーブル"); をロードイベントメソッドに記入しているのも問題がありそうなのですが、 良く理解できません。 ボタンイベントでデータを挿入する方法等、記入方法のご教授よろしくお願いいたします。 当方、超初心者なので、出来れば、ソースコードもお願いいたします。m(_ _)m

  • コンボボックスに固定値をセットして表示する方法

    お世話になります。さっそくですが、質問です。 現在、VB.NET 2008で開発を行ってます。 質問の目的は、 実行プログラムにおいて、 画面に配置したコンボボックスをクリックした際、 以下の値を選択肢として表示させることです。 (【性別】の選択肢) ・男性 ・女性 Form_Load()時に、コンボボックスに上記の値を固定でセットしています。 ------------------------------------------------- Public Function getDataField1() As DataSet '変数宣言 Dim ds As DataSet Dim dt As New DataTable Dim dr As DataRow dt.Columns.Add("DataTextField", GetType(String)) dt.Columns.Add("DataValueField", GetType(String)) '空白セット dr = dt.NewRow() dr("DataTextField") = "      " dr("DataValueField") = ",,,," dt.Rows.Add(dr) dr = dt.NewRow() dr("DataTextField") = "1" dr("DataValueField") = "男性" dt.Rows.Add(dr) dr = dt.NewRow() dr("DataTextField") = "2" dr("DataValueField") = "女性" dt.Rows.Add(dr) ds = New DataSet ds.Tables.Add(dt) Return ds End Function Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim ds As DataSet '性別の取得 ds = getDataField1() For i As Integer = 0 To 2 cmb_性別.Items.Add() ds.Tables(0).Rows(i).Item("DataValueField").ToString() Next i End Sub ------------------------------------------------- 上記内容の場合、コンボボックスをクリックしても 選択肢としては"空白"しか表示されません。 セットした値をコンボボックスの選択肢として表示させる方法を ご存知の方がいらっしゃいましたら、ご教授願えますでしょうか?

  • VB2005 CSVファイルをテーブルへインポート

    こんばんは。 VB2005にてCSVファイルをテーブルへ、インポートする処理を作成しています。ネットで調べたコードを試しています。デバックは通るのですが、処理結果がテーブルへ出力されません。 (TESTdataset内にTable1を作成しています。) 何か解決案がありましたらご教示をお願いいたします。 また、 ※1の'DataGridView1の文なのですが、コメントを外すと 宣言がされていない旨のメッセージが出てきてしまいます。 もし此方も解決案が御座いましたらご教示をお願いいたします。 -------------------------------------------------------------- 以下コードです -------------------------------------------------------------- Imports System.Data Imports System.Data.OleDb Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Const csvPath As String = "c:\DB\" Const csvFile As String = "TEST.csv" Dim sConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & csvPath _ & ";" & "Extended Properties='text;FMT=Delimited'" Dim objConn As New OleDbConnection(sConnectionString) objConn.Open() Dim objCmdSelect As New OleDbCommand("SELECT * FROM " & csvFile, objConn) Dim objAdapter1 As New OleDbDataAdapter() objAdapter1.SelectCommand = objCmdSelect Dim objDataset1 As New DataSet() Dim objTable As DataTable Dim Col As DataColumn objDataset1 = New DataSet("TEST") objTable = New DataTable("Table1") Col = New DataColumn("No") Col.DataType = Type.GetType("System.Int16") objTable.Columns.Add(Col) Col = New DataColumn("Name") Col.DataType = Type.GetType("System.String") objTable.Columns.Add(Col) Col = New DataColumn("出身") Col.DataType = Type.GetType("System.String") objTable.Columns.Add(Col) objDataset1.Tables.Add(objTable) objAdapter1.Fill(objDataset1.Tables(0)) ※1'DataGridView1.DataSource = objDataset1.Tables(0).DefaultView objConn.Close() End Sub End Class --------------------------------------------------------- ※お礼が遅れる場合がありますが、必ずしますので、その時は少々お待ちください。

  • XMLの要素数の確認

    VB.NETで下記のようなコーディングの場合、itemの要素数の最大値を取る方法を教えてください。 Loop処理にて存在するitem数だけ処理を繰り返す事をやりたいのですが。loop処理のブレイク条件が分かりません。 Dim dtSet As New DataSet dim i as Integer dtSet.ReadXml(reader) i=0 Dim dtTable As DataTable = dtSet.Tables(0) debug.write(DSInitial.Tables("name").Rows(0).Item(i))

  • DataGridViewの列にコンボボックスを表示する方法

    言語:VB2005 データベース:SQLServer 非接続型のデータアクセスです。 .net勉強中の初心者です。件名の件について悩んでいますのでご教授お願いします。 http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html 上記HPを参考に勉強しています。 DataGridViewComboBoxColumnを使用する方法ではうまく表示できましたが、 DataSourceプロパティを使用する方法ではうまくできません。 (1)の処理を行うとまず、ID 所属コード 所属名称 がDataGridViewにバインドされます。 そこに(2)の処理を行い 所属名称を コンボボックスに変更したいのですが、所属名称の後に 列名が空白のコンボボックスが新たに追加作成されてしまいます。 そして下記のエラーが発生します。 System.FormatException: DataGridViewComboBoxCell の値が有効ではありません この既定のダイアログを置き換えるには、DataError イベントをハンドルしてください。 いったい何がおかしいのか???です。よろしくお願いします。 '**************************************** '(1)DataGridViewにデータをバインドする '**************************************** strsql = "SELECT ID, 所属コード, t1.名称 as 所属名称 FROM ATBL LEFT OUTER JOIN BTBL ON ATBL.所属 = BTBL.コード ORDER BY ID" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "テーブル") dgrview.DataSource = ds dgrview.DataMember = "テーブル" '---------------------------------------------------------------------- '(2)DataGridViewにComboBoxを設定する(DataSourceプロパティを使用した例) '---------------------------------------------------------------------- Dim DataSource As New DataTable("DataSource") DataSource.Columns.Add("Value", GetType(String)) DataSource.Columns.Add("code", GetType(Integer)) DataSource.Rows.Add("", 0) DataSource.Rows.Add("小学校", 1) DataSource.Rows.Add("中学校", 2) DataSource.Rows.Add("高校", 3) Dim column As New DataGridViewComboBoxColumn() column.DataPropertyName = "所属名称" column.DataSource = DataSource column.ValueMember = "code" column.DisplayMember = "Value" dgrview.Columns.Add(column)

  • .net 複数の主キーを設定する方法

    VB2005、SQLServer2005環境です。 主キーの設定方法について教えて下さい。 主キーが一つの場合下記のように記述しますが、複数ある場合はどう記述すればよろしいですか? お願いします。 strsql = "SELECT * FROM Aテーブル" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "Aテーブル") Dim dt As New DataTable dt = ds.Tables("Aテーブル") '主キーの設定 dt.PrimaryKey = New DataColumn() {dt.Columns("コード1")}

専門家に質問してみよう