Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在下拉列表中访问选定项的值?_Asp.net_Vb.net_Html Select_Selecteditem_Selectedindexchanged - Fatal编程技术网

Asp.net 如何在下拉列表中访问选定项的值?

Asp.net 如何在下拉列表中访问选定项的值?,asp.net,vb.net,html-select,selecteditem,selectedindexchanged,Asp.net,Vb.net,Html Select,Selecteditem,Selectedindexchanged,我有一段代码,可以根据第一个dropdownlist中的内容(在页面的page_Init事件中)填充第二个dropdownlist: …我还需要在第一个下拉列表更改时随时更新第二个下拉列表,因此有以下代码: Protected Sub DropDownListUnits_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownListUnits.SelectedIndexChanged DropDownLis

我有一段代码,可以根据第一个dropdownlist中的内容(在页面的page_Init事件中)填充第二个dropdownlist:

…我还需要在第一个下拉列表更改时随时更新第二个下拉列表,因此有以下代码:

Protected Sub DropDownListUnits_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownListUnits.SelectedIndexChanged

DropDownListMembers.Items.Clear
    DropDownListCustomers.Items.Clear

    Dim selectedUnit As String = DropDownListUnits.SelectedItem.Text

    Dim sqlDAL As New SQLServer(ConfigurationSettings.AppSettings("ConnectionString"))
    Dim membersDT As DataTable
    Dim retDS As DataSet
    Dim sql As String = "select distinct shortname, M.memberno from members M left join memberunitproducts mup on M.MemberNo = mup.MemberNo where unit = '" + selectedUnit  + "' order by shortname"
    retDS = sqlDAL.runSQLDataSet(sql)
    membersDT = retDS.Tables(0)

    DropDownListMembers.DataSource = membersDT
    DropDownListMembers.DataTextField = "shortname"
    DropDownListMembers.DataValueField = "memberno"
    DropDownListMembers.DataBind()
End Sub
…但它不起作用-从DropDownlits中选择不同的单元不会更改DropDownlitMembers中的内容

显然,这是:

Dim selectedUnit As String = DropDownListUnits.SelectedItem.Text
…未检索从DropDownlights到selectedUnit中选择的新值

为了调试目的,我甚至添加了以下内容:

Label2.Text = selectedUnit
…但Label2从未改变

我做错了什么

更新 基于此,我还尝试了以下方法:

Dim selectedUnit As String = DropDownListUnits.SelectedItem.ToString()
…但这没什么区别

更新2 显然,这一事件甚至没有发生。此代码:

Protected Sub DropDownListUnits_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownListUnits.SelectedIndexChanged
        Label2.Text = "it fired"
        . . .
…显示Label2的文本没有更改

更新3 当我尝试将此作为Page_Init事件的第一行时:

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    . . .
    'Populate the Units dropdown
    Dim unitsDT As DataTable
    sql = "Select distinct unit from masterunits where abs(active) = 1"
    retDS = sqlDAL.runSQLDataSet(sql)
    unitsDT = retDS.Tables(0)
    DropDownListUnits.DataSource = unitsDT
    DropDownListUnits.DataTextField = "unit"
    DropDownListUnits.DataValueField = "unit"
    DropDownListUnits.DataBind()

    'Populate the Members dropdown based on Unit selected
    'Dim selectedUnit As String = DropDownListUnits.Text
    Dim selectedUnit As String = DropDownListUnits.SelectedItem.Text
    Dim membersDT As DataTable
    sql = "select distinct shortname, M.memberno from members M left join memberunitproducts mup on M.MemberNo = mup.MemberNo where unit = '" + selectedUnit  + "' order by shortname"
    retDS = sqlDAL.runSQLDataSet(sql)
    membersDT = retDS.Tables(0)
    DropDownListMembers.DataSource = membersDT
    DropDownListMembers.DataTextField = "shortname"
    DropDownListMembers.DataValueField = "memberno"
    DropDownListMembers.DataBind()
    . . .
End Sub
If Not IsPostBack Then Exit Sub
…它甚至一次也不跑

我已经有过类似的经历:

Dim PageAlreadyInitted As Boolean = False

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If PageAlreadyInitted = True Then Exit Sub
    PageAlreadyInitted = True
    . . .
更新4 根据上一条评论,我在页面_Init中尝试了以下内容:

If Page.IsPostBack = True Then Exit Sub
…这也没什么区别-我仍然没有从DropDownloadIts_SelectedIndexChanged事件中得到任何结果;它显然没有被激发,因为Label2没有变为“它被激发”,因为它应该:

Protected Sub DropDownListUnits_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownListUnits.SelectedIndexChanged
    Label2.Text = "it fired"
更新5 这比基思·理查兹(Keith Richards)在他的酒上从椰子树上掉下来后的头发更乱:我试图访问dropdownlist中显示的值,但它给了我错误的值

下面是填充DropDownList的代码:

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If PageAlreadyInitted = True Then Exit Sub
    If Page.IsPostBack = True Then Exit Sub
    PageAlreadyInitted = True

    Dim sqlDAL As New SQLServer(ConfigurationSettings.AppSettings("ConnectionString"))
    'Populate the Units dropdown
    Dim unitsDT As DataTable
    Dim sql As String = "Select distinct mu.unit from masterunits mu left join MasterUnitsProjSales mps on mps.Unit = mu.Unit where abs(active) = 1 and mps.NewBiz != 0 order by mu.unit"
    Dim retDS As DataSet = sqlDAL.runSQLDataSet(sql)
    unitsDT = retDS.Tables(0)
    DropDownListUnits.DataSource = unitsDT
    DropDownListUnits.DataTextField = "unit"
    DropDownListUnits.DataValueField = "unit"
    DropDownListUnits.DataBind()

    'Populate the Members dropdown - TODO: Call this when Unit changes, too
    Dim selectedUnit As String = DropDownListUnits.SelectedItem.Text
    Dim membersDT As DataTable
    sql = "select distinct shortname, M.memberno from members M left join memberunitproducts mup on M.MemberNo = mup.MemberNo where unit = '" + selectedUnit + "' order by shortname"
    retDS = sqlDAL.runSQLDataSet(sql)
    membersDT = retDS.Tables(0)
    DropDownListMembers.DataSource = membersDT
    DropDownListMembers.DataTextField = "shortname"
    DropDownListMembers.DataValueField = "memberno"
    DropDownListMembers.DataBind()

    'Populate the Customers dropdown - TODO: Call this when Member changes, too
    Dim selectedMember As String = DropDownListMembers.SelectedItem.Value
    Dim customersDT As DataTable
    sql = "select distinct companyname from customers C left join members M on M.MemberNo = C.MemberNo where M.MemberNo = '" + selectedMember + "' order by companyname"
    retDS = sqlDAL.runSQLDataSet(sql)
    customersDT = retDS.Tables(0)
    DropDownListCustomers.DataSource = customersDT
    DropDownListCustomers.DataTextField = "companyname"
    DropDownListCustomers.DataValueField = "companyname"
    DropDownListCustomers.DataBind()

    sqlDAL.Dispose()
End Sub
我看到的是:

请注意,“Applebees”是显示的单位(我没有选择它-它是集合中的第一项,默认情况下显示)

然而,当我按下按钮时,存储在Unit数据库中的值是“Abuelos”,而不是“Applebees”。这不仅令人沮丧,而且在极端情况下也很奇怪,因为“Abuelos”甚至不存在于项目集合中:

以下是试图获取值的代码,用于更新和插入数据库中的记录:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim connStr As String = "SERVER=PROSQL05;DATABASE=cpsdata;UID=sa;PWD=sqlsql"
    Dim upd8DML As String = "UPDATE CustomerCategoryLog SET Category = 'Existing', EndDate = @DateTimeYesterday, ChangedOn = @CurrentDateTime WHERE Unit = @Unit And MemberNo = @MemberNo AND Custno = @CustNo"
    Dim insertDML As String = "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, Category, Subcategory, BeginDate, ChangedBy, ChangedOn) VALUES (@MemberNo_Insert, @Unit_Insert, @CustNo_Insert, @Category, @Subcategory, @BeginDate, @ChangedBy, @ChangedOn)"

    Dim coName As String
    Dim argVals(2) As String
    Dim _Unit As String
    Dim _MemberNo As String
    Dim _CustNo As String

    coName = DropDownListCustomers.SelectedItem.ToString()
    argVals = GetArgValsForCompanyName(coName)
    _Unit = argVals(0)
    _MemberNo = argVals(1)
    _CustNo = argVals(2)
    Using conn As New SqlConnection(connStr), _
            cmd As New SqlCommand(upd8DML, conn)
        cmd.Parameters.Add("@Unit", SqlDbType.VarChar, 50).Value = _Unit
        cmd.Parameters.Add("@MemberNo", SqlDbType.VarChar, 50).Value = _MemberNo
        cmd.Parameters.Add("@CustNo", SqlDbType.VarChar, 50).Value = _CustNo
        cmd.Parameters.Add("@DateTimeYesterday", SqlDbType.DateTime).Value = DateTime.Today.AddDays(-1)
        cmd.Parameters.Add("@CurrentDateTime", SqlDbType.DateTime).Value = Date.Now
        conn.Open()
        cmd.ExecuteScalar()
    End Using
    ' Now insert a new record with "Existing" categories and Now as the BeginDate
    Using conn As New SqlConnection(connStr), _
            cmd As New SqlCommand(insertDML, conn)
        cmd.Parameters.Add("@MemberNo_Insert", SqlDbType.VarChar, 50).Value = _MemberNo
        cmd.Parameters.Add("@Unit_Insert", SqlDbType.VarChar, 50).Value = _Unit
        cmd.Parameters.Add("@CustNo_Insert", SqlDbType.VarChar, 50).Value = _CustNo
        cmd.Parameters.Add("@Category", SqlDbType.VarChar, 50).Value = "Existing"
        cmd.Parameters.Add("@Subcategory", SqlDbType.VarChar, 50).Value = "Existing"
        cmd.Parameters.Add("@BeginDate", SqlDbType.DateTime).Value = DateTime.Today
        cmd.Parameters.Add("@ChangedBy", SqlDbType.VarChar, 50).Value = Environment.UserName
        cmd.Parameters.Add("@ChangedOn", SqlDbType.DateTime).Value = Date.Now
        conn.Open()
        cmd.ExecuteScalar()
    End Using
End Sub
以下是在数据库中插入和更新的内容:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim connStr As String = "SERVER=PROSQL05;DATABASE=cpsdata;UID=sa;PWD=sqlsql"
    Dim upd8DML As String = "UPDATE CustomerCategoryLog SET Category = 'Existing', EndDate = @DateTimeYesterday, ChangedOn = @CurrentDateTime WHERE Unit = @Unit And MemberNo = @MemberNo AND Custno = @CustNo"
    Dim insertDML As String = "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, Category, Subcategory, BeginDate, ChangedBy, ChangedOn) VALUES (@MemberNo_Insert, @Unit_Insert, @CustNo_Insert, @Category, @Subcategory, @BeginDate, @ChangedBy, @ChangedOn)"

    Dim coName As String
    Dim argVals(2) As String
    Dim _Unit As String
    Dim _MemberNo As String
    Dim _CustNo As String

    coName = DropDownListCustomers.SelectedItem.ToString()
    argVals = GetArgValsForCompanyName(coName)
    _Unit = argVals(0)
    _MemberNo = argVals(1)
    _CustNo = argVals(2)
    Using conn As New SqlConnection(connStr), _
            cmd As New SqlCommand(upd8DML, conn)
        cmd.Parameters.Add("@Unit", SqlDbType.VarChar, 50).Value = _Unit
        cmd.Parameters.Add("@MemberNo", SqlDbType.VarChar, 50).Value = _MemberNo
        cmd.Parameters.Add("@CustNo", SqlDbType.VarChar, 50).Value = _CustNo
        cmd.Parameters.Add("@DateTimeYesterday", SqlDbType.DateTime).Value = DateTime.Today.AddDays(-1)
        cmd.Parameters.Add("@CurrentDateTime", SqlDbType.DateTime).Value = Date.Now
        conn.Open()
        cmd.ExecuteScalar()
    End Using
    ' Now insert a new record with "Existing" categories and Now as the BeginDate
    Using conn As New SqlConnection(connStr), _
            cmd As New SqlCommand(insertDML, conn)
        cmd.Parameters.Add("@MemberNo_Insert", SqlDbType.VarChar, 50).Value = _MemberNo
        cmd.Parameters.Add("@Unit_Insert", SqlDbType.VarChar, 50).Value = _Unit
        cmd.Parameters.Add("@CustNo_Insert", SqlDbType.VarChar, 50).Value = _CustNo
        cmd.Parameters.Add("@Category", SqlDbType.VarChar, 50).Value = "Existing"
        cmd.Parameters.Add("@Subcategory", SqlDbType.VarChar, 50).Value = "Existing"
        cmd.Parameters.Add("@BeginDate", SqlDbType.DateTime).Value = DateTime.Today
        cmd.Parameters.Add("@ChangedBy", SqlDbType.VarChar, 50).Value = Environment.UserName
        cmd.Parameters.Add("@ChangedOn", SqlDbType.DateTime).Value = Date.Now
        conn.Open()
        cmd.ExecuteScalar()
    End Using
End Sub


正如你所看到的,“Abuelos”是单位价值,虽然它应该是“Applebees”-什么是Hec拉姆齐

只有在初始页面加载时,才需要使用填充其,如果不是IsPostBack。否则,将在回发时使用新数据填充DropDownlights,并丢失选定的值

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   If Not IsPostBack
    . . .
    'Populate the Units dropdown
    Dim unitsDT As DataTable
    sql = "Select distinct unit from masterunits where abs(active) = 1"
    retDS = sqlDAL.runSQLDataSet(sql)
    unitsDT = retDS.Tables(0)
    DropDownListUnits.DataSource = unitsDT
    DropDownListUnits.DataTextField = "unit"
    DropDownListUnits.DataValueField = "unit"
    DropDownListUnits.DataBind()
        . . .

   End If
End Sub

Protected Sub DropDownListUnits_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownListUnits.SelectedIndexChanged

    DropDownListMembers.Items.Clear
    DropDownListCustomers.Items.Clear

    Dim selectedUnit As String = DropDownListUnits.SelectedValue
                                                         ^^^^^^

    Dim sqlDAL As New SQLServer(ConfigurationSettings.AppSettings("ConnectionString"))
    Dim membersDT As DataTable
    Dim retDS As DataSet
    Dim sql As String = "select distinct shortname, M.memberno from members M left join memberunitproducts mup on M.MemberNo = mup.MemberNo where unit = '" + selectedUnit  + "' order by shortname"
    retDS = sqlDAL.runSQLDataSet(sql)
    membersDT = retDS.Tables(0)

    DropDownListMembers.DataSource = membersDT
    DropDownListMembers.DataTextField = "shortname"
    DropDownListMembers.DataValueField = "memberno"
    DropDownListMembers.DataBind()
End Sub

显然,这确实有效:

_Unit = DropDownListUnits.SelectedItem.ToString() 
_MemberNo = DropDownListMembers.SelectedValue.ToString()
_CustNo = DropDownListCustomers.SelectedValue.ToString()
正在使用这些值更新/插入记录。在更广泛的背景下:

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim connStr As String = "SERVER=PROSQL05;DATABASE=cpsdata;UID=sa;PWD=sqlsql"
    Dim upd8DML As String = "UPDATE CustomerCategoryLog SET Category = 'Existing', EndDate = @DateTimeYesterday, 
ChangedOn=@CurrentDateTime,其中Unit=@Unit和MemberNo=@MemberNo和Custno=@Custno” Dim insertDML As String=“插入到CustomerCategoryLog(成员编号、单位、客户编号、类别、子类别、, BeginDate、ChangedBy、ChangedOn)值(@MemberNo\u Insert、@Unit\u Insert、@CustNo\u Insert、@Category、@Subcategory、, @开始,@ChangedBy,@ChangedOn)”

因此,获得如下所示的显示值:

_Unit = DropDownListUnits.SelectedItem.ToString() 
…数据值如下所示:

_MemberNo = DropDownListMembers.SelectedValue.ToString()
_CustNo = DropDownListCustomers.SelectedValue.ToString()
…确实有效


我仍然(不同的问题)当第一个下拉列表的值发生变化时,无法使第二个和第三个下拉列表根据第一个下拉列表的值重新填充,尽管…

当然可以根据另一个下拉列表中的内容动态填充下拉列表,没有es verdad/nicht wahr?您不需要在
Page_Init
中填充
下拉列表成员使用
DropDownListUnits.SelectedValue
填充
DropDownListUnits\u SelectedIndexChanged
事件中的数据。好吧,我想我误解了,“您只想在初始页面加载时将数据填充到DropDownList中“在Page_Init中对成员和客户的填充进行评论并没有帮助-我在选择一个单元时仍然一无所获。显然,似乎没有触发Unit dropdownlist的IndexChanged事件。您是否在Page_Init事件中使用了if not IsPostBack?