0

これは簡単な操作のはずですが、フィールドが更新されていません。ここの誰かに明らかになることを願っています。

私が望むのは、GridView にバインドする前に日時から時間を削除することだけです。クエリが実行され、DataSet にデータが入力されます。次に、これを行います。

    try
    {
        myDataAdapter.Fill(myDataSet);
        DataTable myDataTable = myDataSet.Tables[0];
        // strip time off WEDate
        foreach (DataRow row in myDataTable.Rows)
        {
            DateTime dt = DateTime.Parse(row["WEDate"].ToString());
            string myNewValue = dt.ToShortDateString();
            row["WEDate"] = myNewValue;
        }
        BudgetGridView.DataSource = myDataTable;
        BudgetGridView.DataBind();
    }

例外はスローされず、ページが読み込まれ、時間はまだ WEDate にあります。デバッグして実際に削除されたことを確認するためだけに、「string myNewValue」をそこに貼り付けました。です。したがって、問題のある行は次のようです。

row["WEDATE"] = myNewValue 

その更新は行われていません。

手がかりはありますか?

更新: この投稿に基づいて、以下の更新を行いました: foreachloop にあるデータテーブルの列の値を更新する方法は?

            row.EndEdit();
            myDataTable.AcceptChanges();

まだ喜びはありません。フィールドは更新されていません。

4

2 に答える 2

1

たとえば、フロントエンドでそれをしないのはなぜBoundField.DataFormatStringですか?

DataFormatString="{0:d}" 

それがどのように機能するかを知っていれば、フロントエンドでこれを行うことにオープンです。私のaspxが次のようになっている場合:

<asp:Label ID="WEDateLabel" runat="server" Text='<%# Bind("WEDate") %>'></asp:Label> 

DataFormatString はどこに行くのですか?

a を使用する場合、TemplateField次のオーバーロードを使用できますEval

Text='<%# Eval("WEDate", "0:d") %>' 

編集:上記のコードWEDateは、最初に解析する必要がある文字列であることを既に示しています。そのDateTimeため、上記のアプローチではリテラルのみが表示され0:dます。

私はコードビハインド、特に次RowDataBoundのものを使用しGridViewます。

protected void Gridview1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRow row = ((DataRowView) e.Row.DataItem).Row;
        Label WEDateLabel = (Label) e.Row.FindControl("WEDateLabel");
        DateTime weDate = DateTime.Parse(row.Field<string>("WEDate"));
        WEDateLabel.Text = weDate.ToShortDateString();
    }
}
于 2013-10-30T15:59:41.183 に答える
0

こんにちは、ラベルをバインドするときにこれを行うことができます

Text='<%# Bind("WEDate", "{0:d}")%>'
于 2013-10-30T16:03:57.180 に答える