【问题标题】:Setting today as an ASP.Net SqlDataSource insert parameter default value将今天设置为 ASP.Net SqlDataSource 插入参数默认值
【发布时间】:2012-12-22 13:00:21
【问题描述】:

使用这个 ASP.Net,我们希望在用户单击 DetailsView 的“新建”按钮时看到今天的日期出现在日期文本框中,这样他们就可以在实际插入数据之前在文本框中看到日期。

<InsertParameters>
    <asp:Parameter Name="ClassID" Type="Int32" />
    <asp:Parameter Name="StudentID" Type="Int32" />
    <asp:Parameter Name="Absent" Type="String" />
    <asp:Parameter Name="Late" Type="String" />
    <asp:Parameter Name="LateTimeArrivedAtSchool" Type="DateTime" />
    <asp:Parameter DbType="Date" Name="DateAttendanceTaken"  DefaultValue= "<%=DateTime.Now.ToString() %>"/>
</InsertParameters>

我已经尝试使用 DefaultValue = "" 但文本框中没有出现日期。

这是 DetailsView 中文本框的标记:

<asp:TemplateField 
    HeaderText="Attendance Date:" SortExpression="DateAttendanceTaken">

    <EditItemTemplate>
        <asp:TextBox 
            ID="TextBoxDateAttendanceTaken" 
            runat="server" 
            Text='<%# Bind("DateAttendanceTaken", "{0:MM/dd/yyyy}") %>'>
        </asp:TextBox>

        <asp:RequiredFieldValidator ID="RequiredFieldValidatorEditDate" runat="server" ControlToValidate="TextBoxDateAttendanceTaken" 
            ErrorMessage="Please enter the Attendance Date." Font-Bold="True" Font-Italic="True" ForeColor="Red" 
            SetFocusOnError="True" Display="Dynamic"></asp:RequiredFieldValidator>
    </EditItemTemplate>

    <InsertItemTemplate>
        <asp:TextBox 
            ID="TextBoxDateAttendanceTakenInsert" 
            runat="server" 
            Text='<%# Bind("DateAttendanceTaken", "{0:MM/dd/yyyy}") %>'>
        </asp:TextBox>

        <asp:RequiredFieldValidator ID="RequiredFieldValidatorInsertDate" runat="server" ControlToValidate="TextBoxDateAttendanceTakenInsert" 
            ErrorMessage="Please enter the Attendance Date." Font-Bold="True" Font-Italic="True" ForeColor="Red" 
            SetFocusOnError="True" Display="Dynamic"></asp:RequiredFieldValidator>
    </InsertItemTemplate>

    <ItemTemplate>
        <asp:Label 
            ID="LabelDateAttendanceTaken" 
            runat="server" 
            Text='<%# Bind("DateAttendanceTaken", "{0:MM/dd/yyyy}") %>'>
        </asp:Label>
    </ItemTemplate>

    <ItemStyle ForeColor="Blue" />
</asp:TemplateField>

* 更新 *

我发现要让它工作,需要添加 OnDataBinding,如下所示,并确保代码隐藏文件中有一个处理程序,如下所示。

插入项目模板标记:

<InsertItemTemplate>
    <asp:TextBox 
        ID="TextBoxDateAttendanceTakenInsert" 
        runat="server" 
        Text='<%# Bind("DateAttendanceTaken", "{0:MM/dd/yyyy}") %>'
        OnDataBinding="TextBoxDateAttendanceTakenInsert_DataBinding">
    </asp:TextBox>

</InsertItemTemplate>

代码隐藏文件中的处理程序:

Protected Sub TextBoxDateAttendanceTakenInsert_DataBinding(sender As Object, e As EventArgs)

    Dim txtBox As New TextBox
    txtBox = DetailsView.FindControl("TextBoxDateAttendanceTakenInsert")
    txtBox.Text = DateTime.Now.ToString("d")
End Sub

【问题讨论】:

    标签: asp.net parameters default-value sqldatasource


    【解决方案1】:

    您可以通过抓取 ListView 的插入项并找到 TextBoxDateAttendanceTakenInsert 文本框来使用新按钮的 post back 来设置文本框。

    将文本框的值设置为DateTime.Now

    The Insert Item

    protected void NewButtonClick(object sender, EventArgs e)
    {
        //Code to change to set Insert
        //get insert item
        object control = MyDetailsView.FindControl("TextBoxDateAttendanceTaken")
        //check for null
        if(control != null){
            TextBox tBox = (TextBox)control; //cast to TextBox
            tBox.Text = DateTime.Now.ToString(); //set text
        }
    }
    

    VB:

    Dim tBox As TextBox =  CType(MyDetailsView.FindControl("TextBoxDateAttendanceTaken"), TextBox)
    tBox.Text = DateTime.Now.ToString
    

    应该这样做,它只是将插入项中的文本框设置为每次单击 new 时的当前日期时间。

    【讨论】:

    • 感谢您的快速回复。由于我不知道如何进行编码,您能展示示例编码吗?谢谢。
    • 谢谢。为了让您更轻松,这是在一个基于 MasterPage 的网页中,如果有帮助的话,它的内容 ID 称为“ContentBody”。 :-)
    • 感谢编码。我尝试使用转换器将其转换为 VB.Net,但转换器说对象 control = line 上有错误。
    • 谢谢,快到了。我收到此错误可能是因为它是 DetailsView 而不是 ListView:错误 1 ​​未为“Public Overridable Sub InsertItem(causesValidation As Boolean)”的参数“causesValidation”指定参数。 C:\Development\Knowledge Academy Internal\Knowledge Academy\Knowledge Academy\Attendance.aspx.vb 148 51 Knowledge Academy
    • 感谢指正。代码编译,当我单击新按钮时出现此错误:对象引用未设置为对象的实例。看起来 FindControl 没有找到它。我通过直接从文本框的标记 ID 复制名称来确保拼写正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多