如何通过面板内每个控制回路摆脱它的价值,并从画面保存价值的数据库 [英] How to loop through each control inside the panel to get value from it and save the value from screen to database
问题描述
如何遍历面板内每个控制从中获得价值,并从画面保存价值的数据库
下面这个画面我动态创建控件(标签,UltraDateTimeEditor和Button)
我在datetimeeditor控制持有约datetime值。现在,在屏幕下方,我有保存按钮。
所以,当我点击保存我需要从屏幕上获取时间值并保存到数据库中。所以,我需要遍历每个值,并在其于数据库各行相应保存。
我的code如下。
专用功能LoadFlow() Me.Panel1.Controls.Clear() 如果dtDataTable.Rows.Count> 0 AndAlso运算dtDataTable IsNot运算没有那么 昏暗N = dtDataTable.Rows.Count 对于我作为整数= 0到n - 1
'创建标签
昏暗的标签作为新标签()
label.Text = dtDataTable.Rows(ⅰ)(CHECKPOINTNAME)。的ToString()
屏幕上的位置标签
label.Left = 50
label.Top =第(i + 1)* 30
label.Width = 70 '创建UltraDateTimeEditor
昏暗的dtpicker =新UltraDateTimeEditor
dtpicker.Name =日期+ i.ToString()
dtpicker.MaskInput ={}日期HH:MM
dtpicker.MaskDisplayMode = MaskMode.IncludeBoth
dtpicker.SpinButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Always
dtpicker.Left = 120
dtpicker.Tag = I'设置这是我们将使用这个比较
dtpicker.Top =第(i + 1)* 30
如果未IsDBNull以便(dtDataTable.Rows(ⅰ)(CheckPointTimeValue))。然后
dtpicker.Value = dtDataTable.Rows(ⅰ)(CheckPointTimeValue)
其他
dtpicker.Value =什么
万一 昏暗的按钮作为新按钮()
屏幕上的文本框的位置
button.Tag = I'设置这是我们将使用这个比较
button.Text =现在
button.Left = 290
button.Top =第(i + 1)* 30
添加控件形成
Me.Panel1.ClientArea.Controls.Add(标签)
Me.Panel1.ClientArea.Controls.Add(dtpicker)
Me.Panel1.ClientArea.Controls.Add(按钮) AddHandler的button.Click,AddressOf录入
下一个
万一
什么都不返回
结束功能
私人小组录入(发件人为System.Object的,电子作为System.EventArgs)
昏暗n按钮作为按钮= DirectCast(发件人,巴顿)
如果n按钮IsNot运算没有AndAlso运算nButton.Tag> = 0,那么
对于每个CTRL在Me.Panel1.Controls.OfType(中UltraDateTimeEditor)()
如果ctrl.Tag = nButton.Tag然后
ctrl.Value = DateTime.Now
退出小组
万一
下一个
万一 结束小组
我用于此code数据表看起来像这样
我的屏幕上看起来是这样的。
存储过程查询我的更新SQL
CREATE PROCEDURE [TAMS]。[pu_InsertCheckPointTimes]
(
@ CheckPointTimeID INT
@ CheckPointTimeValue DATETIME = NULL
@ LastModifiedUser VARCHAR(128)
)
如
开始 中频(@CheckPointTimeID = 0) 开始 INSERT INTO [TAMS]。[CheckPointTimes]
([CheckPointTimeValue]
[LastModifiedUser]) VALUES
(@CheckPointTimeValue
@ LastModifiedUser) 结束
其他
开始
UPDATE [TAMS]。[CheckPointTimes]
SET [CheckPointTimeValue] = @CheckPointTimeValue
[LastModifiedUser] = @LastModifiedUser
WHERE [CheckPointTimeID] = @CheckPointTimeID
结束 结束
而不是分配给你把面板内每个控件的标签整数尝试将它分配一个checkpointid值,那么你可以做这样的事情:
对于每个O作为对象在Panel1.Controls
如果typeof运算(O)为UltraDateTimeEditor然后
昏暗日期选择器作为UltraDateTimeEditor = O
昏暗的id作为整数= datePicker.Tag
昏暗的日期,日期时间= datePicker.value
//保存你的价值观 万一
下一个
How to loop through each control inside the panel to get value from it and save the value from screen to database
Here on this screen i am dynamically creating controls (Label, UltraDateTimeEditor and Button)
I am holding some datetime values in datetimeeditor control. Now in the below screen i have save button.
So when i click save i need to get datetime value from screen and save to database. So i need to loop through each value and save accordingly with its respective row in datatabase.
My code is below.
Private Function LoadFlow()
Me.Panel1.Controls.Clear()
If dtDataTable.Rows.Count > 0 AndAlso dtDataTable IsNot Nothing Then
Dim n = dtDataTable.Rows.Count
For i As Integer = 0 To n - 1
'Create label
Dim label As New Label()
label.Text = dtDataTable.Rows(i)("CHECKPOINTNAME").ToString()
'Position label on screen
label.Left = 50
label.Top = (i + 1) * 30
label.Width = 70
'Create UltraDateTimeEditor
Dim dtpicker = New UltraDateTimeEditor
dtpicker.Name = "Date" + i.ToString()
dtpicker.MaskInput = "{date} hh:mm"
dtpicker.MaskDisplayMode = MaskMode.IncludeBoth
dtpicker.SpinButtonDisplayStyle = Infragistics.Win.ButtonDisplayStyle.Always
dtpicker.Left = 120
dtpicker.Tag = i 'Set this as we will use this for comparison
dtpicker.Top = (i + 1) * 30
If Not IsDBNull(dtDataTable.Rows(i)("CheckPointTimeValue")) Then
dtpicker.Value = dtDataTable.Rows(i)("CheckPointTimeValue")
Else
dtpicker.Value = Nothing
End If
Dim button As New Button()
'Position textbox on screen
button.Tag = i 'Set this as we will use this for comparison
button.Text = "Now"
button.Left = 290
button.Top = (i + 1) * 30
'Add controls to form
Me.Panel1.ClientArea.Controls.Add(label)
Me.Panel1.ClientArea.Controls.Add(dtpicker)
Me.Panel1.ClientArea.Controls.Add(button)
AddHandler button.Click, AddressOf UpdateTime
Next
End If
Return Nothing
End Function
Private Sub UpdateTime(sender As System.Object, e As System.EventArgs)
Dim nButton As Button = DirectCast(sender, Button)
If nButton IsNot Nothing AndAlso nButton.Tag >= 0 Then
For Each ctrl In Me.Panel1.Controls.OfType(Of UltraDateTimeEditor)()
If ctrl.Tag = nButton.Tag Then
ctrl.Value = DateTime.Now
Exit Sub
End If
Next
End If
End Sub
My datatable used for this code looks like this
My screen looks like this.
My update SQL Stored Procedure Query
CREATE PROCEDURE [TAMS].[pu_InsertCheckPointTimes]
(
,@CheckPointTimeID INT
,@CheckPointTimeValue DATETIME = NULL
,@LastModifiedUser VARCHAR(128)
)
AS
BEGIN
IF(@CheckPointTimeID = 0)
BEGIN
INSERT INTO [TAMS].[CheckPointTimes]
([CheckPointTimeValue]
,[LastModifiedUser])
VALUES
(@CheckPointTimeValue
,@LastModifiedUser)
END
ELSE
BEGIN
UPDATE [TAMS].[CheckPointTimes]
SET [CheckPointTimeValue] = @CheckPointTimeValue
,[LastModifiedUser] = @LastModifiedUser
WHERE [CheckPointTimeID] = @CheckPointTimeID
END
END
Instead assigning an integer to a tag of each control you put inside a panel try to assign it a checkpointid value and then you can do something like this:
For Each o As Object In Panel1.Controls
If TypeOf (o) Is UltraDateTimeEditor Then
Dim datePicker as UltraDateTimeEditor = o
Dim id as Integer = datePicker.Tag
Dim date as DateTime = datePicker.value
//save your values
End If
Next
这篇关于如何通过面板内每个控制回路摆脱它的价值,并从画面保存价值的数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!