无法更新 myDataTable.Rows 中的值
本文关键字:Rows myDataTable 更新 | 更新日期: 2023-09-27 18:37:25
这应该是一个简单的操作,但我的字段没有更新。 我可能做错了什么,希望对这里的某个人来说是显而易见的。
我想要的只是在绑定到我的 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();
还是没有喜悦。 该字段未更新。
为什么不在前端这样做,例如通过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
,这就是为什么上述方法仅显示文字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();
}
}
嗨,
您可以在绑定标签时执行此操作
Text='<%# Bind("WEDate", "{0:d}")%>'