我正在尝试使用ASP和VB级联下拉列表
1st drop down --> Sex Type
> Male
> Female
2nd Drop Down -->Status
> Orphan
> Married
> UnMarried
> Divorced
> Widow
> Special Need
> Normal
现在,
如果男性从第一次下拉中选择,则从第二次下拉中选择(孤儿,特殊需要,已婚,未婚,离婚,寡妇和普通)
如果女性从第一次下拉中选择,那么从第二次下拉中选择(孤儿,特殊需要和普通)
我正在使用实体从数据库中获取drop dwons的数据;
VB代码
context As New EGrantsModel.Entities
ddlSexType.DataSource = context.SEXTYPE
ddlSexType.DataValueField = "SEXTYPE"
ddlSexType.DataTextField = "SEXTYPE"
ddlSexType.DataBind()
ddlCitizenStatus.DataSource = context.CITIZENSTATUS
ddlCitizenStatus.DataValueField = "CITIZENSTATUSID"
ddlCitizenStatus.DataTextField = "CITIZENSTATUS"
ddlCitizenStatus.DataBind()
ASP代码
<div class="labelinput">
<asp:Label ID="lblSexType" CssClass="lblwidth" runat="server" Text="">Sex Type</asp:Label>
<asp:DropDownList ID="ddlSexType" runat="server"/>
</div>
<div class="labelinput">
<asp:Label ID="lblCitizenStatus" CssClass="lblwidth" runat="server" Text="">Status</asp:Label>
<asp:DropDownList ID="ddlCitizenStatus" runat="server"/>
</div>
任何人都可以在这方面指导我。谢谢
答案 0 :(得分:1)
在ddlSexType的Selected index change事件上绑定第二个下拉列表。 如果它等于Male,则检查第一个下拉列表中的所选项目,然后绑定相应的项目。 例如:
protected void ddlSexType_SelectedIndexChanged(object sender, EventArgs e)
{
if( ddlSexType.Text == "Male" )
{
// Bind 2nd drop down
// you can add items manually as
ListItem li = new ListItem();
li.Text = "Orphan";
ddlCitizenStatus.Items.Add(li);
// Add all the items in the same way
// or get data from the database and bind it to the dropdown
DataTable dt = new DataTable();
ddlCitizenStatus.DataSource = dt;
ddlCitizenStatus.DataTextFeild= "DataFeild";
ddlCitizenStatus.DataValueFeild= "DataValueFeild";
ddlCitizenStatus.DataBind();
}
else if( ddlSexType.Text == "Female" )
{
// Bind other items
}
}
答案 1 :(得分:1)
检查一下:
Public Class WebForm4
Inherits System.Web.UI.Page
Private Sub CitizenBind(ByVal strSexType As String)
Dim lstCitizenStatus As New List(Of CitizenStatus)
With lstCitizenStatus
.Add(New CitizenStatus("1", "Orphan"))
.Add(New CitizenStatus("2", "Married"))
.Add(New CitizenStatus("3", "UnMarried"))
.Add(New CitizenStatus("4", "Divorced"))
.Add(New CitizenStatus("5", "Widow"))
.Add(New CitizenStatus("6", "Special Need"))
.Add(New CitizenStatus("7", "Normal"))
End With
Me.ddlCitizenStatus.Items.Clear()
With Me.ddlCitizenStatus
.DataSource = lstCitizenStatus
.DataValueField = "CitizenStatusId"
.DataTextField = "CitizenStatusT"
.DataBind()
End With
If strSexType.Contains("F") Then
Dim lstCitizenStatusRemove As New List(Of CitizenStatus)
With lstCitizenStatusRemove
.Add(New CitizenStatus("2", "Married"))
.Add(New CitizenStatus("3", "UnMarried"))
.Add(New CitizenStatus("4", "Divorced"))
.Add(New CitizenStatus("5", "Widow"))
End With
For Each lstCS As CitizenStatus In lstCitizenStatusRemove
Me.ddlCitizenStatus.Items.Remove(New ListItem(lstCS.CitizenStatusT.ToString(), lstCS.CitizenStatusId.ToString()))
Next
End If
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim lstSexType As New List(Of SexType)
lstSexType.Add(New SexType("Male"))
lstSexType.Add(New SexType("Female"))
With Me.ddlSexType
.DataSource = lstSexType
.DataValueField = "SexTypeT"
.DataTextField = "SexTypeT"
.DataBind()
End With
CitizenBind("ALL")
End If
End Sub
Protected Sub ddlSexType_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ddlSexType.SelectedIndexChanged
CitizenBind(Me.ddlSexType.SelectedValue)
End Sub
End Class
如果您对该代码有任何疑问,请告知我们。
答案 2 :(得分:0)
这就是我解决问题的方法
我只需在表格中添加三个字段
1- ISMALE
2- ISFEMALE
3- COMMON
如果男性和女性的状态相同,请COMMON
为真。
并为男性状态设置ISMALE
True 和ISFEMALE False 。
让女性状态为ISFEMALE
真,ISMALE 为假。
VB代码
Protected Sub ddlSexType_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlSexType.SelectedIndexChanged
Try
Dim context As New EGrantsModel.Entities
If (ddlSexType.SelectedValue = "Female") Then
Dim femaleDataSource As Object
femaleDataSource = (From femaleDS In context.CITIZENSTATUS _
Where femaleDS.ISFEMALE = "1" And femaleDS.ISMALE = "0" AndAlso femaleDS.COMMON = "1"
Select femaleDS)
ddlCitizenStatus.DataSource = femaleDataSource
ddlCitizenStatus.DataValueField = "CITIZENSTATUSID"
ddlCitizenStatus.DataTextField = "CITIZENSTATUS"
ddlCitizenStatus.DataBind()
ElseIf (ddlSexType.SelectedValue = "Male") Then
Dim maleDataSource As Object
maleDataSource = (From femaleDS In context.CITIZENSTATUS _
Where femaleDS.ISFEMALE = "0" And femaleDS.ISMALE = "1" AndAlso femaleDS.COMMON = "1"
Select femaleDS)
ddlCitizenStatus.DataSource = maleDataSource
ddlCitizenStatus.DataValueField = "CITIZENSTATUSID"
ddlCitizenStatus.DataTextField = "CITIZENSTATUS"
ddlCitizenStatus.DataBind()
End If
Catch ex As Exception
callErrorPage(ex.Message, ex.InnerException)
End Try
End Sub
我对VB很陌生,所以如果有人认为这是一个冗长的方法,那么请更新我以获得更好的方法。
再次感谢 Waqar Janjua 和 CoderRoller ,感谢他们宝贵的时间和专业知识。