0
我在一个项目中有一个窗体,其上有2 UltraGrids
。一个显示合同信息,另一个包含模块信息。条件为真的UltraGrid更新
在合同网格中,可能有3行,例如,每个都有一个唯一的合同ID。当单击一行时,它会使用在该合同下分配的模块填充模块网格。
我需要做的是更新数据库中联系人ID与选定合同行中的ID相匹配的模块。
我到目前为止的代码是
For Each ugr As UltraGridRow In ugModules.Rows
For Each ur As UltraGridRow In ugContracts.Rows
mID = ugr.Cells("ModuleID").Text
mName = ugr.Cells("ModuleName").Text
numUsers = ugr.Cells("NumberUsers").Text
sql = "UPDATE dbo.tblModules SET ModuleName = ?, NumberUsers = ? WHERE ContractID = ? AND ModuleID = ?"
cmd = New OleDbCommand(sql, con)
cmd.Parameters.Add("@mname", OleDbType.VarChar).Value = mName
cmd.Parameters.Add("@numusers", OleDbType.VarChar).Value = numUsers
cmd.Parameters.Add("@conID", OleDbType.Integer).Value = ur.Cells("ContractID").Value
cmd.Parameters.Add("@mid", OleDbType.Integer).Value = mID
If cmd.ExecuteNonQuery() = 0 Then
sql = "INSERT INTO dbo.tblModules(ModuleID, ModuleName, NumberUsers, ContractID) VALUES(?, ?, ?, ?)"
cmd = New OleDbCommand(sql, con)
cmd.Parameters.Add("@mid", OleDbType.Integer).Value = mID
cmd.Parameters.Add("@mname", OleDbType.VarChar).Value = mName
cmd.Parameters.Add("@numusers", OleDbType.VarChar).Value = numUsers
cmd.Parameters.Add("@conID", OleDbType.Integer).Value = ur.Cells("ContractID").Value
cmd.ExecuteNonQuery()
End If
Next
Next
这段代码的问题是,它试图更新从与当前客户,这是造成冲突的ID领域的每一个合同的每个模块。
是否有修改此代码的方法,以便它只更新具有正在编辑的contractID的记录,而不是显示在联系人表中的所有合同ID?
(道歉,这是一个有点难以解释,高兴,如果它的外壳混乱,以澄清任何东西)
您好Steve,我已经检索contractID,这不是问题。这是我遇到问题的模块网格,因为它会根据所选联系人(不同模块到不同行)过滤显示哪些行。因此,如果可能的话,我只需要更新ultragrid中的可见行。 – Harambe
如何过滤模块网格?我想,当你选择合同时,模块网格仅填充属于该合同的模块。或者你填充网格将所有存在的模块,然后使用网格的过滤器功能? – Steve
第一个,网格填写合同中的模块 – Harambe