0

ページの読み込み時にこの形式 (dd/mm/yyyy 00:00:00) で日付値を表示する ASP.NET gridview の列があります。これは、「日付」型として宣言された列を持つ SQL テーブルにバインドされます。

フッター テンプレートには、"挿入" ボタンと、グリッドビューのさまざまな列にあるテキスト ボックスがあります。ボタンをクリックすると、新しいレコードが SQL サーバーのデータテーブルに挿入されます。

ただし、 SQLException was unhandled by usercode というエラーを伴うデバッグ エラーがあります。文字列から日時を変換する際に変換に失敗しました

このメソッドのコードは次のとおりです。

protected void insertRowToDOitems(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Add")
        {
            string strDO_no = ((TextBox)GridView1.FooterRow.FindControl("txtdo_no")).Text;
            string strDO_item_no = ((TextBox)GridView1.FooterRow.FindControl("txtdo_item_no")).Text;
            string strMaterial = ((TextBox)GridView1.FooterRow.FindControl("txtmaterial")).Text;
            string strDeliveryQty = ((TextBox)GridView1.FooterRow.FindControl("txtdelivery_qty")).Text;
            string strSO_no = ((TextBox)GridView1.FooterRow.FindControl("txtso_no")).Text;
            string strSOItem_no = ((TextBox)GridView1.FooterRow.FindControl("txtso_item_no")).Text;
            string strUOM = ((TextBox)GridView1.FooterRow.FindControl("txtuom")).Text;
            string strDeliveryDate = ((TextBox)GridView1.FooterRow.FindControl("txtDelivery_date")).Text;

            //SQLDataSource parameters
            DOitem.InsertParameters.Clear();
            DOitem.InsertParameters.Add("do_no", strDO_no);
            DOitem.InsertParameters.Add("do_item_no", strDO_item_no);
            DOitem.InsertParameters.Add("material", strMaterial);
            DOitem.InsertParameters.Add("delivery_qty", strDeliveryQty);
            DOitem.InsertParameters.Add("so_no", strSO_no);
            DOitem.InsertParameters.Add("so_item_no", strSOItem_no);
            DOitem.InsertParameters.Add("uom", strUOM);
            DOitem.InsertParameters.Add("delivery_date", strDeliveryDate);

            DOitem.Insert();
        }
    }

そして、このメソッドは GridView タグから呼び出されました。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                    DataKeyNames="do_no,do_item_no" DataSourceID="DOitem" CellPadding="4" 
                    GridLines="None" 
                    AllowSorting="True" ShowFooter="True" style="margin-top: 1px" 
                    ForeColor="#333333" Height="58px" Width="546px" OnRowCommand="insertRowToDOitems">

エラーが日付の形式またはタイプの違いによるものである場合、これはどのように解決できますか?

また、SQL テーブルから取得した日付をグリッドビューに次のように表示するにはどうすればよいですか ("dd/MM/yyyy")。私は次のことを試しましたが、うまくいきません:

<EditItemTemplate>
                            <asp:TextBox ID="txtDelivery_date" runat="server"
                                         Text='<%#Bind("delivery_date", "{0:dd/MM/yyyy}") %>'>
                            </asp:TextBox>
                        </EditItemTemplate>
4

1 に答える 1

0

はい、たとえば、フロントエンドで英国の時刻形式を使用していて、SQL サーバーが米国の日付形式を使用している場合など、挿入エラーが発生するのはおそらく日付形式の問題です。これらの問題を回避するために、コードでは常に ISO ユニバーサル形式の日付文字列に固執するため、次の行を変更します。

DOitem.InsertParameters.Add("delivery_date", strDeliveryDate);

これに

DOitem.InsertParameters.Add("delivery_date", DateTime.Parse(strDeliveryDate).ToString("s"));

「s」は時刻を次のような形式に変換します: 2013-03-12T21:15:07

申し訳ありませんが、EditTemplate の問題がわかりません。そのコードは問題ないように見えます。

于 2013-03-21T14:15:38.380 に答える