0

这应该是一个简单的操作,但我的字段没有被更新。我可能会做错事,希望对这里的人来说是显而易见的。

我想要的只是在绑定到我的 GridView 之前从日期时间中删除时间。我的查询运行并填充了一个数据集。然后我们这样做:

    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。我将“字符串 myNewValue”卡在那里只是为了调试并确认它实际上已被剥离。这是。所以违规行似乎是:

row["WEDATE"] = myNewValue 

该更新没有发生。

有什么线索吗?

更新:根据这篇文章,我进行了以下更新: 如何更新 foreachloop 中的数据表中的列中的值?

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

仍然没有喜悦。该字段未更新。

4

2 回答 2

1

你为什么不在前端这样做,例如 via BoundField.DataFormatString

DataFormatString="{0:d}" 

如果我知道这将如何工作,我愿意在前端这样做。如果我的 aspx 看起来像这样:

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

DataFormatString 去哪里了?

如果你使用 aTemplateField你可以使用的重载Eval

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

编辑:您上面的代码已经表明这WEDate是一个需要首先解析的字符串DateTime,这就是为什么上面的方法只显示文字0:d

我会使用代码隐藏,尤其RowDataBoundGridView

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 回答