gpt4 book ai didi

asp.net - 如何访问下拉列表中所选项目的值?

转载 作者:行者123 更新时间:2023-12-05 00:52:05 26 4
gpt4 key购买 nike

我有这段代码可以根据第一个下拉列表中的内容(在页面的 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

...我还需要在第一个下拉列表发生变化时更新第二个下拉列表,所以有这段代码:

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

...但它不起作用 - 从 DropDownListUnits 选择不同的单位不会更改 DropDownListMembers 中的内容。

显然是这样的:

Dim selectedUnit As String = DropDownListUnits.SelectedItem.Text

...未将从 DropDownListUnits 中选择的新值检索到 selectedUnit。

为了调试目的,我什至添加了这个:

Label2.Text = selectedUnit

...但是 Label2 永远不会改变。

我在这里做错了什么?

更新

基于 this ,我也试过这个:

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 事件中的第一行时:

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

根据上一条评论,我在 Page_Init 中尝试了这个:

If Page.IsPostBack = True Then Exit Sub

...这没什么区别——我仍然没有从 DropDownListUnits_SelectedIndexChanged 事件中得到任何结果;它显然没有被解雇,因为 Label2 没有更改为“它被解雇”,因为它应该:

Protected Sub DropDownListUnits_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownListUnits.SelectedIndexChanged
Label2.Text = "it fired"

更新 5

这比 Keith Richards 的头从椰子树上掉下来后的头发更乱:我尝试访问下拉列表中显示的值,但它给了我错误的值。

这是填充下拉列表的代码:

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

这是我看到的:

enter image description here

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

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

enter image description here

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

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

这是数据库中插入和更新的内容:

enter image description here

如您所见,“Abuelos”是单位值,尽管它应该是“Applebees” - Hec Ramsey !?!

最佳答案

显然,这确实有效:

_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 WHERE Unit = @Unit 和 MemberNo = @MemberNo AND Custno = @CustNo" Dim insertDML As String = "INSERT INTO CustomerCategoryLog (MemberNo, Unit, Custno, Category, Subcategory,BeginDate、ChangedBy、ChangedOn)值(@MemberNo_Insert、@Unit_Insert、@CustNo_Insert、@Category、@Subcategory、@BeginDate、@ChangedBy、@ChangedOn)”

    Dim _Unit As String
Dim _MemberNo As String
Dim _CustNo As String

_Unit = DropDownListUnits.SelectedItem.ToString()
_MemberNo = DropDownListMembers.SelectedValue.ToString()
_CustNo = DropDownListCustomers.SelectedValue.ToString()
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

所以,像这样获取显示值:

_Unit = DropDownListUnits.SelectedItem.ToString() 

...以及像这样的数据值:

_MemberNo = DropDownListMembers.SelectedValue.ToString()
_CustNo = DropDownListCustomers.SelectedValue.ToString()

...确实有效。

我仍然(不同的问题)无法让第二个和第三个下拉列表根据第一个下拉列表的值重新填充,但是...

关于asp.net - 如何访问下拉列表中所选项目的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com