现在谷歌搜索了一段时间,无法在任何地方看到这个答案。
在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。
干杯
答案 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;
}
}