这应该是一个简单的操作,但我的字段没有更新。我可能会做错事,希望对这里的某些人显而易见。
我想要的是在绑定到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上。我把“字符串myNewValue”卡在那里只是为了调试并确认它实际上被剥离了。它是。因此,违规行似乎是:
row["WEDATE"] = myNewValue
该更新未发生。
任何线索?
更新:根据此帖子,我进行了以下更新: How to update a value in a column in a datatable which is in a foreachloop?
row.EndEdit();
myDataTable.AcceptChanges();
仍然没有快乐。该字段未更新。
答案 0 :(得分:1)
为什么不在前端执行此操作,例如通过BoundField.DataFormatString
?
DataFormatString="{0:d}"
如果我知道这将如何工作,我愿意在前端做这件事。 如果我的aspx看起来像这样:
<asp:Label ID="WEDateLabel" runat="server" Text='<%# Bind("WEDate") %>'></asp:Label>
DataFormatString在哪里?
如果您使用TemplateField
,则可以使用Eval
的重载:
Text='<%# Eval("WEDate", "0:d") %>'
修改:您上面的代码已经显示WEDate
是您需要首先解析为DateTime
的字符串,这就是为什么上述方法只显示文字{ {1}}。
我会使用代码隐藏,尤其是0:d
的{{1}}:
RowDataBound
答案 1 :(得分:0)
嗨,你可以在绑定标签时执行此操作
Text='<%# Bind("WEDate", "{0:d}")%>'