【问题标题】:Updating Database with value from datepicker control ASP.NET VB使用 datepicker 控件 ASP.NET VB 中的值更新数据库
【发布时间】: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 的记录,我不会收到任何错误,因为数据库中存在一个值供控件显示。

【问题讨论】:

    标签: asp.net vb.net formview


    【解决方案1】:

    我认为最好的方法是使用jQueryjQuery UI,它们有一个date picker,可以附加到FormView 中的常规ASP.NET 文本框。因此,如果您的 FormView 代码看起来像这样:

     <asp:FormView ID="FormView1" runat="server" DataKeyNames="id" DataSourceID="SqlDataSource1">
            <EditItemTemplate>
                id:
                <asp:Label ID="idLabel1" runat="server" Text='<%# Eval("solution_id") %>' />
                <br />
                date_modified:
                <asp:TextBox ID="date_modifiedTextBox" runat="server" Text='<%# Bind("date_modified") %>' />
                <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="Update" />
                <asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
            </EditItemTemplate>
            <ItemTemplate>
                id:
                <asp:Label ID="idLabel" runat="server" Text='<%# Eval("solution_id") %>' />
                <br />
                date_modified:
                <asp:Label ID="date_modifiedLabel" runat="server" Text='<%# Bind("date_modified") %>' />
            </ItemTemplate>
        </asp:FormView>
    

    您可以使用 jQuery UI 运行类似的东西来获取 date_modified 文本框上的日期选择器:

    $('[id$=date_modifiedTextBox]').datepicker()
    

    $('[id$=date_modifiedTextBox]') 部分是使用 jQuery 选择 ASP.NET 控件所必需的,如果它只是一个普通元素,您可以使用 $('.className')$('#id') 或类似的东西。希望这会有所帮助。

    【讨论】:

    • 我会试试这个。我实际上找到了 eWorld 的 Calendar PopUp 控件,它可以工作,除非数据库中的日期字段为 NULL。我向开发人员发送了一条说明,询问如何处理 NULL,但尚未收到回复。你知道 JQuery 日期选择器是否处理空值吗?我正在做的是更新记录(因此 datepicker 字段确实在我的 EditItemTemplate 中并且它绑定到日期)。就像我说的,我会尝试这个 JQuery 之一,但我对 JQuery 语法的了解为零,而且 $.classname 对我来说是新的。
    • 实际上,现在我已经下载了 jQuery UI —— 我不知道如何处理它?我对json一无所知...这些文件是否替换了.dlls?无能为力。如何引用它,如何将控件放入我的工具箱?
    【解决方案2】:

    问题解决了。

    我在 4GuysFromRolla.com 上看到一篇关于 RJS POP 日历的文章 (http://preview.tinyurl.com/cerm9xv),它勾选了所有方框。成功实现了,因为日历和指定的文本框是分开的,所以不用绑定!它工作得很好。 4GuysFromRolla 又一次救了我的培根……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2011-02-27
      相关资源
      最近更新 更多