作者:南非酋长 | 来源:互联网 | 2023-10-13 11:14
我有一个网页,其中包含一个数据绑定的gridview。字段之一是TemplateField文本框,允许用户修改数量。我在GridView的外部有一个“更新”按钮,该按钮链接到一个even,它应该使用屏幕上的值更新数据库值。
我是ASP.NET编程的新手,我很难弄清楚哪里出了问题,因为当我单击按钮时,事件会触发,但是对于我来说,我无法确定在框中获取如何获取文本的更新的“屏幕”值。我尝试阅读许多Stack Overflow页面以解决此问题,但没有找到适合我的解决方案,因此我怀疑我的设置有问题。
这是我的aspx页面:
这是我的btnSaveQtys_Click方法中的循环。现在,我只是想先获取数据,然后再使用它来确定数据库中的数据是否需要更新,因为它是一个新值:
For Each gvr As GridViewRow In gvMain.Rows
'Check if the value is the same as the database value
Dim ID As String = gvr.Cells(GridViewInfo("mnuID")).Text
Dim ItemNumber As String = gvr.Cells(GridViewInfo("mnuItem")).Text
Dim AmountText As TextBox = gvr.FindControl("txtBoxQty")
Dim NewAmount As String = AmountText.Text
Next
我将数据存储在名为“ MainData”的数据表中,因此这是我在Page_Load方法中运行的代码,以获取初始数据或从Session的PostBack上重新获取数据:>
If Session("MainData") Isnot Nothing AndAlso CType(Session("MainData"),DataTable).Rows.Count <> 0 Then
MainData = Session("MainData")
Else
Dim Query As String = SELECT DISTINCT --Need Distinct because we have multiple customers per district,and we need the customer to get to the employee.
--Perhaps there's a field somewhere in a District table that could contain this if an employee can be assigned to a whole district?
md.dstName,mm.*
FROM [NSPrograms].[dbo].tblMonthlyMenu mm
INNER JOIN [NSPrograms].[dbo].tblMenuDistricts md ON md.dstChain = mm.mnuDistrict
AND md.dstactive = 1
INNER JOIN [NSData].[dbo].[tblCustomers] c ON c.chain_name_id = md.dstChain
INNER JOIN [NSData].[dbo].[vw_Employees] e ON c.Sales_Rep_ID = e.Employee_ID
AND LOWER(e.Email) = '#USERID#'
ORDER BY mm.mnuMonth,mm.mnuID
]]>.Value.Replace("#USERID#",username)
MainData = GetDataTable(Query,"dbNSData")
Session.Add("MainData",MainData)
End If
gvMain.DataSource = MainData
gvMain.DataBind()
gvMain.Visible = True
我觉得我缺少某种关键要素。我认为数据绑定将“神奇地”工作,以便当值在屏幕上更改时,它在DataTable中也会更改,但是我想那没有发生吗?
当我尝试运行此解决方案时,这就是我得到的。我尝试将第一行从5.00更改为10.00:
当我在代码中放置一个断点时,这就是我看到的变量值。请注意,我当然可以读取BoundField项目,用户ID字段不可见,而ItemItemNumber可见,但是由于某种原因,数量并未更新以匹配屏幕上的内容:
我缺少哪一部分导致数据绑定不“粘”?