使用按钮将数值从 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
【问题讨论】:
您的DataGridView
的DataSource
设置为什么?您是在使用 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