如何通过面板内每个控制回路摆脱它的价值,并从画面保存价值的数据库 [英] How to loop through each control inside the panel to get value from it and save the value from screen to database

查看:130
本文介绍了如何通过面板内每个控制回路摆脱它的价值,并从画面保存价值的数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何遍历面板内每个控制从中获得价值,并从画面保存价值的数据库

下面这个画面我动态创建控件(标签,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆