2014-01-16 50 views
1

我只是在搜索現有問題後才找到解決方案。ASP.NET EditItemTemplate綁定到TimeSpan

基本上,我有一個啓用了編輯功能的細節視圖。它綁定到一個LINQDataSource。其中一個字段是SQL時間,它以TimeSpan的形式進入ASP.NET。我想要一個雙向綁定。我已經有用於我的目的在String和TimeSpan之間進行轉換的函數。

但這是我的難題。我覺得我需要一個文本=表達式來填充文本框編輯開始時,

<EditItemTemplate> 
    <asp:TextBox ID="TextBox1" runat="server" Text='<%# TimeSpanToString(Eval("Time")) %>'></asp:TextBox> 
</EditItemTemplate> 

,但在同一時間,不同的文本=表達式來指定時間跨度值寫回數據庫的更新;是這樣的:

<EditItemTemplate> 
    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Time", StringToTimespan(TextBox1.Text) %>'></asp:TextBox> 
</EditItemTemplate> 

正如你所看到的,我非常不確定的語法在評估和演示使用,並綁定在首位表情,但我希望我已經成功地解釋了我的問題。只能有一個Text =表達式,所以顯然需要在這裏完成不同的工作,以便在數據綁定和更新期間進行兩次轉換。

謝謝! 桑德拉

從@ jadarnel23試圖解決方案:

對於ItemTemplate中,TimeSpanToTimeString(EVAL( 「時代」))完美的作品。 ItemUpdating功能還可以完美工作 - 用戶可以輸入例如下午1點30分,接受。

剩下的唯一問題就是EditTemplate。

綁定(「時間」)可以工作,但不會爲用戶提供格式良好的時間。如您所說,TimeSpanToString(Eval(「Time」))不起作用,因爲它不會在ItemUpdating中創建NewValues條目。

而且應該是贏家TimeSpanToString(Bind(「Time」)),實際上會在綁定時拋出一個錯誤「編譯器錯誤信息:BC30451:'綁定'沒有聲明它可能無法訪問,因爲它保護級別「。它看起來像我需要詳細說明綁定,以便我的函數可以看到它,但是如何?謝謝,這真的很接近!

回答

2

由於you cannot call the Bind "method" from within another public method in your markup(比如你可以用Eval做),它看起來像你是停留在EditItemTemplate做一個正常的「綁定」:

<EditItemTemplate> 
    <asp:TextBox ID="TextBox1" runat="server" 
     Text='<%# Bind("Time") %>'> 
    </asp:TextBox> 
</EditItemTemplate> 

注:你需要做一個Bind,因爲將使其在你的ItemUpdating事件出現後,將其保存到數據庫中

然後儘快更新它顯示的目的,而DetailsView控件是數據綁定(確保它也是在編輯模式下):

protected void yourDetailsView_DataBound(object sender, EventArgs e) 
{ 
    if (yourDetailsView.CurrentMode == DetailsViewMode.Edit) 
    { 
     TextBox timeTextBox = (TextBox)yourDetailsView.FindControl("TextBox1"); 
     timeTextBox.Text = TimeSpanToString(timeTextBox.Text); 
    } 
} 

然後,您可以處理the ItemUpdating event和操作的「時代」之前的值保存到數據庫中:

protected void yourDetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) 
{ 
    String newTime = e.NewValues["Time"].ToString(); 
    e.NewValues["Time"] = StringToTimespan(newTime); 
} 

通知您可以從DetailsViewUpdateEventArgs.NewValues collection

提取用戶輸入的值
+0

這聽起來很棒!我應該有時間在今天或明天的這個項目上工作,並期待回報。謝謝! – Sandra

+0

非常好,@Sandra。我期待着聽到它是否適合你=) – jadarnel27

+0

嘿,@Sandra。看起來你的一些評論沒有通過=)什麼不工作? – jadarnel27