list(of String)回发时无法填充,仅首次加载正常的问题求助
问题排查与解决方案
核心问题定位
你遇到的情况是:页面首次加载时列表填充正常,但加载已保存的「进行中」页面时,列表未填充导致控件状态错误。虽然填充代码不在If Not IsPostBack块内,但以下几个关键点可能是问题根源:
逐一排查修复
1. 检查查询参数的有效性
「进行中」页面加载时,txtAgreement.Text可能没有正确加载已保存的协议值,导致SQL查询无返回结果。
- 调试验证:在查询前添加代码输出参数值
Debug.WriteLine($"当前协议值:{txtAgreement.Text}") - 如果值为空或不正确,检查「进行中」页面的初始化逻辑,确保
txtAgreement已从保存的数据源(如Session、数据库)中赋值。
2. 确认SQL查询是否返回数据
即使参数正确,也可能存在数据库数据不匹配的情况:
- 添加代码验证查询结果行数:
termDA.Fill(termDT) Debug.WriteLine($"查询返回行数:{termDT.Rows.Count}") - 如果行数为0,检查数据库中对应协议值的
SKU和Agreement表是否存在关联数据,或协议值是否有大小写、空格等差异。
3. 每次填充前清空列表
避免旧数据残留干扰,在循环添加前清空列表:
listValues.Clear() For i As Integer = 0 To termDT.Rows.Count - 1 listValues.Add(termDT.Rows(i)("PartsTerm").ToString()) listValues.Add(termDT.Rows(i)("LaborTerm").ToString()) Next
4. 调整代码执行顺序
如果「进行中」页面有加载已保存数据的逻辑(比如恢复用户之前填写的内容),确保填充列表和设置控件状态的代码在加载保存数据之后执行,防止控件状态被后续代码覆盖。
5. 捕获数据库操作异常
添加异常处理,排查是否存在连接或查询错误:
Try objCn.Open() ' 原查询与填充代码... Catch ex As Exception Debug.WriteLine($"数据库错误:{ex.Message}") Finally objCn.Close() End Try
优化建议(可选)
使用Using语句自动管理数据库资源,避免连接泄漏:
Using objCn As New SqlConnection("你的数据库连接字符串") Using sqlTermSelect As New SqlCommand() sqlTermSelect.Connection = objCn sqlTermSelect.CommandText = "Select PartsTerm, LaborTerm FROM SKU INNER JOIN Agreement On SKU.SKU = Agreement.SKU WHERE Agreement = @Agreement" sqlTermSelect.Parameters.Add("@Agreement", SqlDbType.VarChar, 50).Value = txtAgreement.Text Dim termDA As New SqlDataAdapter(sqlTermSelect) Dim termDT As New DataTable() termDA.Fill(termDT) listValues.Clear() For i As Integer = 0 To termDT.Rows.Count - 1 listValues.Add(termDT.Rows(i)("PartsTerm").ToString()) listValues.Add(termDT.Rows(i)("LaborTerm").ToString()) Next End Using End Using
内容的提问来源于stack exchange,提问作者WhiteGlint
相关产品推荐
相关产品推荐

