C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

日付形式のテキストボックスへのデータセット

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■97609 / inTopicNo.1)  日付形式のテキストボックスへのデータセット
  
□投稿者/ てっちゃん (31回)-(2021/06/13(Sun) 18:58:59)

分類:[.NET 全般] 

いつもお世話になっております。

テキストボックス(TextMode="Date")へデータベースの値をセットしたのですが、表示されません。


【環境】
・Visual Studio Community 2019 Version 16.10.0
・.NET Framework Version 4.8
・Windows10 Pro 64bit
・データベース Microsoft Access 2010 対象日付フィールドのフォーマットは日付形式

【aspx】

<body>
    <form id="form1" runat="server">
        <div>
            <asp:Label ID="Label1" runat="server" BackColor="#0033CC" ForeColor="White" Text="  − コンタクト履歴登録 −"></asp:Label>
        </div>
        <table class="auto-style2">
            <tr>
                <td class="auto-style1" style="background-color: #CCFFFF">名刺データ名</td>
                <td>
                    <asp:Label ID="LblName" runat="server" Text="Label"></asp:Label>
                </td>
            </tr>
            <tr>
                <td class="auto-style1" style="background-color: #CCFFFF">コンタクト日付 *</td>
                <td>
                    <asp:TextBox ID="TxtDate" runat="server" TextMode="Date"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="日付は必須入力です。" ForeColor="Red" ControlToValidate="TxtDate" ></asp:RequiredFieldValidator>
                    <asp:TextBox ID="TxtDate2" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td class="auto-style1" style="background-color: #CCFFFF">入力者</td>
                <td>
                    <asp:Label ID="LblInName" runat="server" Text="Label"></asp:Label>
                </td>
            </tr>
            <tr>
                <td class="auto-style3" style="background-color: #CCFFFF">内容 *</td>
                <td class="auto-style4">
                    <asp:TextBox ID="TxtMemo" runat="server" Height="126px" TextMode="MultiLine" Width="397px"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="内容は必須です。" ForeColor="Red" ControlToValidate="TxtMemo"></asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td class="auto-style1" style="background-color: #CCFFFF">公開区分 *</td>
                <td>
                    <asp:RadioButton ID="RadioYes" runat="server" Checked="True" GroupName="RadioYesNo" Text="公開する" />
                    <asp:RadioButton ID="RadioNo" runat="server" GroupName="RadioYesNo" Text="非公開" />
                </td>
            </tr>
            <tr>
                <td align="center" colspan="2">
                    <asp:Button ID="BtnAdd" runat="server" Text="登録" Width="150px" />
                      <asp:Button ID="BtnCancel" runat="server" Text="登録中止" Width="150px" CausesValidation="False" />
                </td>
            </tr>
        </table>
    </form>
</body>

【aspx.vb】
(一部略)

            Dim strSQL As String
            strSQL = ""
            strSQL = "SELECT T_RIREKI.*, T_MEISI.PERSONAL_NAME "
            strSQL = strSQL & "FROM T_RIREKI LEFT JOIN T_MEISI ON T_RIREKI.bcno = T_MEISI.ID "
            strSQL = strSQL & " WHERE dno = " & wkdno

            '履歴データのDataSet
            Dim da As New OleDbDataAdapter(strSQL, con)
            Dim dstbl As New DataSet

            con.Open()
            da.Fill(dstbl, "RIREKI_DT")
            Dim dt As DataTable = dstbl.Tables("RIREKI_DT")

            '(履歴データをページ項目にセット)----------------------------------------
            Dim dr As DataRow = dt.Rows(0)
            LblName.Text = dr("PERSONAL_NAME")
            TxtDate.Text = dr("inpdate")
            TxtDate2.Text = dr("inpdate")
            LblInName.Text = dr("inpname")

(以降略)

【状況】

データベースから取得したtxtdate以外は期待通りに表示されました。
またTxtdate2は比較の為に設定したシングルラインのテキストボックスです。

(表示例)

  TxtDate  「 年/ 月/日  ■」(■はカレンダーアイコン)
    TxtDate2   「2021/05/15」

入力を考えると日付形式のテキストボックスの方が利便性が良いのですが・・・。

【質問】
1.テキストボックス(TextMode="Date")にデータベースの日付形式の項目をセットする方法を教えてください。
 
  下記は試しましたが結果は同じでした。
 TxtDate.Text = Format(dr("inpdate"),"yyyy/MM/dd")
 TxtDate.Text = dr("inpdate")、Tostring("yyyy-MM-dd")

2.VS2005の頃はjavascriptでカレンダーを表示してましたが、VS2019では標準でカレンダーを使えるので出来るだけ
 標準搭載機能を使いたいと思いますが、皆様はどうされていますか?

アドバイスの程よろしくお願いいたします。


引用返信 編集キー/
■97610 / inTopicNo.2)  Re[1]: 日付形式のテキストボックスへのデータセット
□投稿者/ WebSurfer (2265回)-(2021/06/13(Sun) 20:08:31)
No97609 (てっちゃん さん) に返信

またこれ ↓ と同じような話になるのですかね?

http://bbs.wankuma.com/index.cgi?mode=al2&namber=97509
引用返信 編集キー/
■97616 / inTopicNo.3)  Re[2]: 日付形式のテキストボックスへのデータセット
□投稿者/ てっちゃん (34回)-(2021/06/14(Mon) 13:18:24)
No97610 (WebSurfer さん) に返信

WebSurfer様、いつもアドバイスありがとうございます。

一応自己解決できましたので、参考までにコードを載せておきます。

TxtDate.Text = DateTime.Parse(dr("inpdate")).ToString("yyyy-MM-dd")


解決済み
引用返信 編集キー/
■97619 / inTopicNo.4)  Re[3]: 日付形式のテキストボックスへのデータセット
□投稿者/ WebSurfer (2266回)-(2021/06/14(Mon) 16:34:11)
No97616 (てっちゃん さん) に返信

> 一応自己解決できましたので、参考までにコードを載せておきます。
>
> TxtDate.Text = DateTime.Parse(dr("inpdate")).ToString("yyyy-MM-dd")

option strict on にするとエラーになりませんか?

それはともかく、そもそも TextMode="Date" を使うから問題が出るのであって、それを無理やり(?)何と
かするのを「自己解決」とするのは自分的には釈然としません。

そもそもの問題は TextMode="Date" と設定することにより、レンダリングされる結果の html の input 要素
の type="date" の date で、それによって、

(1) value 属性への設定は yyyy-MM-dd 形式しか受け付けなくなる

(2) date は HTML5 で導入されたものでブラウザ依存(表示が異なる。IE11 は非対応)

という問題があるということです。

なので、解決策は「TextMode="Date"」は使わない、カレンダー表示が必要なら Ajax Control Tooklit の
CalenderExtender とか jQuery UI の DatePicker など自由度が高くブラウザ依存でないものを使うのが
良いと思います。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ