0

DataSource からの DateTime を示す TemplateField 列を持つ GridView があります。

<Columns>
    <asp:CommandField ShowEditButton="True" />

    <asp:TemplateField HeaderText="Start Date">
        <EditItemTemplate>
            <asp:TextBox ID="txtDateStart" runat="server" 
                Text='<%# Bind("dtDateStart", "{0:dd/MM/yyyy}") %>'</asp:TextBox>

        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="Label1" runat="server" 
                Text='<%# Bind("dtDateStart", "{0:dd/MM/yyyy}") %>'></asp:Label>
         </ItemTemplate>

    </asp:TemplateField>
</Columns>

日付を正しい形式で表示すると、正常に機能します。形式は DAY で始まり、その後に MONTH が続くことに注意してください。

編集モードに切り替えると、TextBox の日付を'31-01-2013'に変更し、GridView の更新リンクを押すと、エラーが発生します: パラメータ 'dtDateStart' の値を 'System.String' から 'System.String' に変換できません.DateTime' エラーは、自分のコードではなく GridView によって生成されます。私の DataSource の UpdateMethod が呼び出される前に発生します。

「 01-31-2012 と入力すると、データが正しく処理され、値がデータベースに更新されます。

どういうわけか、日付が表示されるとき、それはdd-MM-yyyy の形式を使用します(私が必要とするのと同じように) しかし、TextBox から新しい値を読み取るときは、MM-dd-yyyyを使用します

誰か助けてくれませんか?

4

2 に答える 2

0

お返事をありがとうございます。Web サイト内の文化設定についてはわかりません。dateformat を使用して Bind 関数を証明するだけで十分であると想定していました。

これまでに、次の回避策を実装しました。これは、他の人にとって役立つことを願っています。

クラスに文字列型のプロパティを追加しました。このプロパティは、グリッドビューへのバインドにのみ使用します。

// Original Date property //
public DateTime dtDateStart { get; set; }

// Additional Date property of type string // 
public string sDateStart
{
    get
    {
        return dtDateStart.ToString("dd/MM/yyyy");
    }
    set
    {
        dtDateStart = DateTime.ParseExact(value, "dd/MM/yyyy", null);
    }
}

これを回答としてマークする必要があるかどうかはわかりません。しかし、おそらく他の人もこれを簡単な回避策として使用できます。

于 2013-02-05T06:52:22.003 に答える
-1

こんな感じで使えると思います

         <EditItemTemplate>
            <asp:TextBox ID="txtDateStart" runat="server" 
                Text='<%# Convert.ToDateTime(Bind("dtDateStart")).ToString("dd/MM/yyyy") %>'</asp:TextBox>

        </EditItemTemplate>

これはあなたを助けます。

于 2013-02-05T07:01:21.883 に答える