无法更新 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();

还是没有喜悦。 该字段未更新。

无法更新 myDataTable.Rows 中的值

为什么不在前端这样做,例如通过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}")%>'