使用按钮将数值从 Numeric 控件传递到 DataGridView 控件中的相应单元格

Posted

技术标签:

【中文标题】使用按钮将数值从 Numeric 控件传递到 DataGridView 控件中的相应单元格【英文标题】:Pass values from Numeric control into corresponding cells in DataGridView control with a button 【发布时间】:2015-01-16 21:44:31 【问题描述】:

我想通过一个按钮将四个 Numeric Up/Down 控件中的每个控件的值移动到 DataGridView 列/行中。例如,操作员在向上/向下数字控件中设置值,然后单击按钮。然后程序应该向 DataGridView 添加一个新行,并将 Numeric Up/Down 控件中的任何值传递到新行的新单元格中。截至目前,我的添加新行部分和删除按钮都在工作(删除 DataGridView 的最后一行)。现在,如何通过按钮将 Numeric 控件值传递到 DataGridView 的新行的单元格中? DatGridView 创建的每个新行都有四个单元格,对应于四个数字上/下控件。谢谢。

Private Sub addStep_btn_Click(sender As Object, e As EventArgs) Handles addStep_btn.Click
    LftMtr_Data_Grid.ColumnCount = 4
    LftMtr_Data_Grid.RowCount = LftMtr_Data_Grid.RowCount + 1
    LftMtr_Data_Grid.Columns(0).HeaderText = "  Spindle Speed              (rpm)"
    LftMtr_Data_Grid.Columns(1).HeaderText = "     Accel Rate         (rpm/S)"
    LftMtr_Data_Grid.Columns(2).HeaderText = "     Decel Rate         (rpm/S)"
    LftMtr_Data_Grid.Columns(3).HeaderText = "        Time (S)"
    For Each c As DataGridViewColumn In LftMtr_Data_Grid.Columns
        c.Width = 120
    Next

    Dim rowNumber As Integer = 1
    For Each row As DataGridViewRow In LftMtr_Data_Grid.Rows
        If row.IsNewRow Then Continue For
        row.HeaderCell.Value = "Step " & rowNumber
        rowNumber = rowNumber + 1
    Next

    LftMtr_Data_Grid.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
    rowCount1 = LftMtr_Data_Grid.RowCount
    txtBox1.Text = rowCount1
End Sub

【问题讨论】:

您的DataGridViewDataSource 设置为什么?您是在使用 DataTable 对象来保存值还是其他东西? 没有链接到 DataGridView 的 DataSource。不,我没有使用 DataTable 对象来保存这些值。那会是更好的方法吗?到目前为止,我已经设置了用户界面,程序从一个空的 DataGridView 开始。用户使用表单顶部的数字上下控件,然后单击一个按钮,然后添加一个新行并使用来自向上/向下数字控件的值填充该行的每个单元格。这部分在我的程序中效果很好。但现在我还需要将这些值添加到 ArrayList。 【参考方案1】:

试试下面的方法。请注意,您不需要每次都设置列标题,只需在 Load() 事件中设置一次即可!

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LftMtr_Data_Grid.ColumnCount = 4
        LftMtr_Data_Grid.Columns(0).HeaderText = "  Spindle Speed              (rpm)"
        LftMtr_Data_Grid.Columns(1).HeaderText = "     Accel Rate         (rpm/S)"
        LftMtr_Data_Grid.Columns(2).HeaderText = "     Decel Rate         (rpm/S)"
        LftMtr_Data_Grid.Columns(3).HeaderText = "        Time (S)"
        For Each c As DataGridViewColumn In LftMtr_Data_Grid.Columns
            c.Width = 120
        Next
        LftMtr_Data_Grid.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
    End Sub

    Private Sub addStep_btn_Click(sender As Object, e As EventArgs) Handles addStep_btn.Click
        Dim values() As Object = NumericUpDown1.Value, NumericUpDown2.Value, NumericUpDown3.Value, NumericUpDown4.Value
        Dim index As Integer = LftMtr_Data_Grid.Rows.Add(values)
        LftMtr_Data_Grid.Rows(index).HeaderCell.Value = "Step " & (index + 1)
        LftMtr_Data_Grid.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
    End Sub

    Private Sub delStep_btn_Click(sender As Object, e As EventArgs) Handles delStep_btn.Click
        If LftMtr_Data_Grid.Rows.Count > 0 Then
            LftMtr_Data_Grid.Rows.RemoveAt(LftMtr_Data_Grid.Rows.Count - 1)
        End If
    End Sub

End Class

【讨论】:

【参考方案2】:

我自己想出来的。这是我想出的:

Dim rowNumber As Integer = 1
    For Each row As DataGridViewRow In LftMtr_Data_Grid.Rows
        If row.IsNewRow Then Continue For
        row.HeaderCell.Value = "Step " & rowNumber
        LftMtr_Data_Grid.CurrentCell = LftMtr_Data_Grid.Rows(LftMtr_Data_Grid.RowCount - 1).Cells(0)
        LftMtr_Data_Grid.CurrentRow.Cells(0).Value = LftMtr_Speed_Incr.Value
        LftMtr_Data_Grid.CurrentRow.Cells(1).Value = LftMtr_Accel_Incr.Value
        LftMtr_Data_Grid.CurrentRow.Cells(2).Value = LftMtr_Decel_Incr.Value
        LftMtr_Data_Grid.CurrentRow.Cells(3).Value = test_Time_Incr1.Value
        rowNumber = rowNumber + 1
    Next

此应用程序使用空的或部分填充的 dataGridView。当用户单击按钮时,代码会在 dataGridView 中创建一个新行,使新行成为选定行,然后最后用四个 Numeric Up/down 控件中的值填充新行中的每个单元格(也可以是文本框,具体取决于您的应用程序)。这是直接从我的特定应用程序复制的代码。您的可能与变量名称、标签文本等略有不同。

【讨论】:

以上是关于使用按钮将数值从 Numeric 控件传递到 DataGridView 控件中的相应单元格的主要内容,如果未能解决你的问题,请参考以下文章

excel中怎样实现将字符串变量string改成数值型变量numeric

将子控件的点击事件传递给父控件

将子控件的点击事件传递给父控件

R语言as.numeric函数将因子变量(factor)转化为数值变量(Numeric)

WPF 将对象从窗口的用户控件传递到另一个窗口的用户控件

了解将数据从页面传递到用户控件