无法更新DataTable.Rows中的值

时间:2013-10-30 15:41:47

标签: c# asp.net

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

我想要的是在绑定到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();

仍然没有快乐。该字段未更新。

2 个答案:

答案 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}")%>'