设置下拉列表以从不同于填充值的内容开始

时间:2014-05-23 13:46:14

标签: asp.net vb.net

现在谷歌搜索了一段时间,无法在任何地方看到这个答案。

在VS2013中使用ASP.NET(VB)。

我有一个包含4个预设值的下拉列表(见下文)

<asp:DropDownList ID="TimeTextMins" runat="server" style="font-family:'Century Gothic'; font-size:12pt;">
<asp:ListItem Value="00"></asp:ListItem>
<asp:ListItem Value="15"></asp:ListItem>
<asp:ListItem Value="30"></asp:ListItem>
<asp:ListItem Value="45"></asp:ListItem>
</asp:DropDownList>

这些值表示15分钟分组中的分钟数。

当页面加载时我想在此下拉列表中以当前时间(以分钟为单位),用户可以根据需要更改为15分钟段。我知道如何在VB中获取当前分钟,不知道如何设置DDL。使用selectedvalue不起作用,也没有.text。

干杯

2 个答案:

答案 0 :(得分:3)

由于下拉列表只能设置为列表中的值,因此您需要将当前分钟动态添加到页面Load事件中的下拉值:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not Page.IsPostBack Then
        Dim currentMinute = Date.Now.Minute
        Dim currentMinuteString = CStr(currentMinute).PadLeft(2, "0"c)
        If currentMinute Mod 15 = 0 Then
            Me.TimeTextMins.SelectedValue = currentMinuteString
        Else
            Dim position = (currentMinute \ 15) + 1
            Me.TimeTextMins.Items.Insert(position, currentMinuteString)
            Me.TimeTextMins.SelectedValue = currentMinuteString
        End If
    End If

End Sub

<强>更新

根据您对下拉列表中仅需要15分钟间隔的问题的评论,我不知道您可以使用标准下拉列表控件执行此操作,但是有第三方HTML控件更多像combobox一样。您可以做的是在更改选择时删除添加的项目:

Private Sub TimeTextMins_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TimeTextMins.SelectedIndexChanged
    Dim itemsToRemove =
        Me.TimeTextMins.Items.Cast(Of ListItem)() _
            .Where(Function(x) x IsNot Me.TimeTextMins.SelectedItem AndAlso CInt(x.Value) Mod 15 <> 0) _
            .ToList()
    For Each item In itemsToRemove
        Me.TimeTextMins.Items.Remove(item)
    Next
End Sub

您需要将AutoPostBack="true"添加到asp:DropDownList代码中。

答案 1 :(得分:0)

您可以使用标准下拉菜单执行此操作,并且可以在展开列表时隐藏当前时间项,而无需回发。你必须编写js函数并将其分配给onmousedown事件并做一些小技巧。

首先将您计算的当前时间设置为列表中第一项的“文本”属性(将其“值”设置为“00”)在Page_Load后面的代码中。

当页面加载时,您将在下拉列表中看到当前时间作为选定时间。现在在分配给onmousedown的js函数中,您只需将第一个选项的innerText属性设置为'00': 您需要标志变量才能执行一次:

var flag = 0;
    function dropDownList_MouseDown()
    {
        if (flag == 0)
        {
            var list = document.getElementById('<%= DropDownList1.ClientID %>');

            list.options[0].innerText = '00';

            flag =1;
        }
    }