2013-10-30 57 views
0

這應該是一個簡單的操作,但我的字段沒有被更新。我很可能會做出錯誤的事情,希望對這裏的某個人來說很明顯。無法更新myDataTable.Rows中的值

我想要的是在綁定到我的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上。我在那裏插入「string 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

你能做到這一點是有沒有myNewValue的日期? – Zaki

+0

爲什麼不在前端執行該操作,例如通過['BoundField.DataFormatString'](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.boundfield.dataformatstring .aspx)? 'DataFormatString =「{0:d}」' –

+0

@Sam:是的,那裏有一個日期。我把這一行寫入,這樣我就可以通過調試器來查看是否真的被剝離了。它是。 – DJGray

回答

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首先,這就是爲什麼上述方法只顯示字面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(); 
    } 
} 
+0

該服務器標記正在字段中放置一個文字「0:d」。會導致什麼? – DJGray

+0

'WEDate'是一個'DateTime'還是一個看起來像'DateTime'的字符串?試試這個:'<%#string.Format(「{0:d}」,Eval(「WEDate」))%>'。 **編輯**忘記我的問題。 'WEDate'是一個字符串,不是日期,這就是單調的原因。 –

+0

@DJGray:編輯我的答案,以提供我將使用的方法。 –

0

你好,當你綁定您的標籤

Text='<%# Bind("WEDate", "{0:d}")%>' 
+0

該服務器標記正在字段中放置一個文字「0:d」。會導致什麼? – DJGray

+0

嗨,文字是格式化您的日期時間列在短日期它的作品像在後面的代碼stringformat但這是HTML – Ryuzaki