2011-05-10 58 views
1

我在我的asp.net項目中使用gridview來查看和修改數據庫中的一些記錄。數據庫有兩列:start_date和end_date。當創建新記錄時,這些列包含null,但可以稍後使用gridview update命令修改它們。用自定義表達式的雙向綁定?

在gridview我有兩個模板字段(名稱start_date和end_date),我已經放置了兩個日曆控件。在點擊gridview的更新鏈接時,由於空值綁定到日曆,它總是返回一個錯誤。我已經使用這個輔助函數來解決這個問題:

protected DateTime ReplaceNull(Object param) 
{ 
    if (param.Equals(DBNull.Value)) 
    { 
     return DateTime.Now; 
    } 
    else 
    { 
     return Convert.ToDateTime(param); 
    } 
} 

和使用日曆控件的SelectedDate這兩個自定義表達式:

ReplaceNull(Eval("start_date")) 
ReplaceNull(Eval("end_date")) 

的問題是雙向的數據在選擇的日期結合日曆不更新數據庫表。有沒有解決方法?或者,更好的解決方案將不勝感激。

+0

'aspx'請.... – 2011-05-10 10:58:48

回答

0

我不知道爲什麼你插入一條新記錄時讓它們爲null,但是我認爲很多方法可以解決這個問題。

他們之一:在RowDataBound事件的Gridview

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       if (e.Row.Cells[1] == null) //the index of the start_date 
       { 
        e.Row.Cells[1].Text = DateTime.Now.ToString(); // in your case you will make the selected date of the calender(through casting to calender) with the value you need. 
       } 

      } 
     } 

或者:您可以捕獲該異常,你在你的更新按鈕,通過

try and catch block滿足。

+1

感謝您的回覆,我想我did'nt解釋你爲什麼正確的零的開始,其實我工作的項目管理系統,其中,銷售和支持代表採取來自客戶的工作並根據細節在數據庫中創建項目,然後項目經理將這些項目分配給工人,工作人員每天檢查他們的工程單並開始處理它們。因此,當一個銷售和支持代表創建了一個項目,開始和結束日期爲空,然後一旦項目經理指派他們,他將這些日期,如果我用你綁定什麼,我應該在壓光控制使用所提供的代碼? – Ahmed 2011-05-10 19:17:12

+0

謝謝你,我的代碼考慮開始和結束日期被直接存儲在GridView的細胞,如果你使用模板字段如我所料,把你壓光控制,然後使用一個對象的數據源作爲數據源或設置數據通過後面的代碼來源,那麼綁定將是'綁定表達式'。 看看這個鏈接:: http://msdn.microsoft.com/en-us/library/ms178366.aspx。 – 2011-05-11 08:48:09

+1

謝謝你的訣竅。 – Ahmed 2011-05-11 11:21:20