【发布时间】:2013-01-14 09:03:59
【问题描述】:
提前道歉,可能是新手问题。 (asp.net 新手,VB 编码,最佳控件零知识)。请尊重我对 AJAX 控件或使用 MVC 并尝试最小化 javascript 不感兴趣。就技术而言,我需要做的事情非常简单。
我正在开发一种允许用户编辑数据库数据的表单。我选择使用 FormView,这样我就可以像传统的 vba 应用程序一样对其进行格式化。如果我允许 VWD 自动格式化控件,我可以将数据源设置为我的数据库表,并且数据库中的值会成功显示。我也可以使用此表单编辑数据库中的所有内容。
但是,老板讨厌输入日期。
我还没有找到具有数据源功能的日期选择器控件,该控件的工作方式类似于 formview 中自动构建的文本框(具有绑定到数据源功能)。所以,我假设不存在。我需要一些保证,我认为我需要做的是正确的方法。
我不应该通过前端自动的东西来使用 FormView 控件的数据源,而是应该
- 放置这些数据选择器控件之一,该控件仅将日历与表单视图中所有日期字段的文本框结合起来(不尊重那些构建它们的人,只是不敢相信它们没有更丰富的功能,这似乎非常需要给出可用日期选择器的数量)
- 在 Page_Load 中声明我的数据源并加载所有控件(如果它们有使用 FindControl 的现有数据)
- 使用 Data_Bound 块利用 FindControl 从每个控件中检索选定的值,并为更新构建动态 SQL 字符串
- 使用块后面的代码之一声明和更新我的数据库,可能在 DataBound 中
我在正确的轨道上吗?我没有经验可以对我的假设充满信心。 拜托,如果有更简单的方法,我会接受,但我必须让它“漂亮”。 欢迎提出任何形式的控制建议。
---进一步讨论我的问题 这是一些代码来证明我实际上已经尝试过解决这个问题...... 在我的 FormView 代码块中,我有:
<asp:FormView ID="FormView1" runat="server" DataKeyNames="MASTERID_Action"
DataSourceID="srcAction">
<EditItemTemplate>
MASTERID_Action:
<asp:Label ID="MASTERID_ActionLabel1" runat="server"
Text='<%# Eval("MASTERID_Action") %>' />
<br />
Action_Description:
<asp:TextBox ID="Action_DescriptionTextBox" runat="server"
Text='<%# Bind("Action_Description") %>' />
<br />
Action_Target:
<asp:TextBox ID="Action_TargetTextBox" runat="server"
Text='<%# Bind("Action_Target") %>' />
<br />
Action_Captured:
<asp:TextBox ID="Action_CapturedTextBox" runat="server"
Text='<%# Bind("Action_Captured") %>' />
<br />
Action_Declined:
<asp:TextBox ID="Action_DeclinedTextBox" runat="server"
Text='<%# Bind("Action_Declined") %>' />
<br />
Action_AgreedDate:
<ewc:CalendarPopup ID="CalendarPopup1" runat="server" Culture="en-AU"
PostedDate="" SelectedDate='<%# Bind("Action_AgreedDate") %>'
SelectedValue="01/14/2013 08:47:54" UpperBoundDate="12/31/9999 23:59:59"
VisibleDate="01/14/2013 08:47:54" />
<br />
...
</EditItemTemplate>
我的数据库将此 Action_AgreedDate 保存为可为空。 当我查看 ItemTemplate(在浏览器中)时,日期显示为 0.000(因为它是一个文本字段并绑定到 Action_AgreedDate,所以没有发生错误),当我单击编辑转到 EditItemTemplate 时,我收到此错误: 从类型“DBNull”到类型“Date”的转换无效。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidCastException:从类型“DBNull”到类型“Date”的转换无效。
来源错误:
第 95 行:
第 96 行:Action_AgreedDate:
第 97 行:'
第 99 行:SelectedValue="01/14/2013 08:47:54" UpperBoundDate="12/31/9999 23:59:59"
我可以很容易地将其翻译成“控件发现了一个空字段并且不知道如何处理它”;问题是,我不知道该怎么办。我已经检查了该字段的属性(CalendarPOP 字段以查看是否有处理空值的设置,但对我来说没有什么明显的。我目前正在尝试在线查找有关控件的更多文档。(我已经联系了 eWorld 和希望他们能够做出回应。)
我还应该补充一点,如果我请求一个已经有 Action_AgreedDate 的记录,我不会收到任何错误,因为数据库中存在一个值供控件显示。
【问题讨论】: