一、问题
上篇博客中提到怎样动态创建控件,那怎样将这些动态控件的内容写入到相应的表中
二、方案
创建两个集合,将动态部分放入到一个集合中,再与静态部分控件放到第二个集合,这样做的好处:方便的获取数据,使静态部分和动态部分隔离(两部分数据中字段命名不同)
三、实例
U层获得数据
<span style="font-size:18px;"> '报警温设置
Dim objArryList As New System.Collections.ArrayList
'将静态部分信息加入的集合中
objArryList.Add(txtAirTempHigh.Text)
objArryList.Add(txtAirTempLow.Text)
objArryList.Add(txtAirHumiHigh.Text)
objArryList.Add(txtAirHumiLow.Text)
objArryList.Add(txtStorageTempHigh.Text)
objArryList.Add(txtStorageTempLow.Text)
objArryList.Add(txtStoragHumiHigh.Text)
objArryList.Add(txtStorageHumiLow.Text)
'获得每个仓的层数
enStorage.storageNumber = cboStorageNo.Text.Trim
enReceive = dataBLL.CheckStorageLayer(enStorage)
'将层数赋给变量intC
Dim intC As Integer
intC = enReceive.Layer.ToString.Trim
'获得动态部分控件的的数量
Dim intCount = txtLIst.Count
'重新定义一个与动态控件相等的集合
Dim strHighBJ As New ArrayList(intCount)
'将动态控件加入到新建的集合
For Each txtBox As TextBox In txtLIst
strHighBJ.Add(txtBox.Text)
Next
'将所有的报警温控件加入到总的集合objArrayList
objArryList.Add(strHighBJ)
'添加信息
If dataBLL.AddDataInfo(objArryList, strHighBJ, intC, enGrain) = True Then
MsgBox("成功添加信息", vbOKCancel, "信息提示")
Exit Sub
End If
</span>
D层存数据
<span style="font-size:18px;">''' <summary>
''' 添加数据卡片信息
''' </summary>
''' <paramname="alData"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function AddData(alData AsArrayList, alhj As ArrayList, intC As Integer, enGrain As GrainInfoEntity) AsBoolean Implements IGrainInfo.AddData
'添加静态部分报警温设置
Dim strSql = "exec('insert into'+@storageNumber+'([airTempHighAlarm],[airTemLowAlarm],[storageTempHighAlarm],[storageTempLowAlarm],[airHumiHighAlarm],[airHumiLowAlarm],[storageHumiHighAlarm],[storageHumiLowAlarm]"
'根据层号找到相应的字段
For j = 1 To intC
strSql += ",[layer"
strSql += j.ToString()
strSql += "HighAlarm]"
strSql += ",[layer"
strSql += j.ToString()
strSql += "LowAlarm]"
Next
strSql += ")values("
'获得静态控件的值
For k = 0 To alData.Count - 2
strSql += alData(k).ToString()
strSql += ","
Next
'获得动态控件的值
For m = 0 To alhj.Count - 2
strSql += alhj(m).ToString()
strSql += ","
Next
strSql += alhj(alhj.Count -1).ToString()
strSql += ")')"
Dim sqlParams As SqlParameter() = {NewSqlParameter("@StorageNumber", "T_SetStorageAlarm" &enGrain.storageNumber)}
Dim helper As New SqlHelper
Dim bolInsert =helper.UpdDelAlter(strSql, CommandType.Text, sqlParams)
</span>
四、总结
1、动态加载控件部分:把控件放入到集合中,再将集合放入到容器中显示出来即可
2、将动态生成的控件内容写入到表中,遍历静态和动态部分的数据