我想使用循环函数对DataGridView中的每一行进行一些计算。
由于我之前从未使用过DataGridView,而且编程技巧非常有限,我需要一些帮助。
我需要以这种格式提供五个主要部分。
第2列除以文本框(speed = CDbl(tbWinchSpeed.Text))
从1开始计算,然后添加了另一个文本框值(延迟= CDbl(tbSampleDelay.Text))
然后将2中的计算添加到时间(ts = DateTimePicker1.Value)并显示在第3列
2的计算结果是*,是一个组合框:
cmbSampleRate.Items.Add("1")
cmbSampleRate.Items.Add("2")
cmbSampleRate.Items.Add("4")
cmbSampleRate.Items.Add("8")
然后添加到第4栏
这需要使用if循环到网格上的每一行。如果第2列相同,则只添加上一行的时间延迟,填充第3列,然后*延迟(cmbSampleRate
)并添加到第4列
我知道我需要的只是发现我很难理解编码
此致
丹尼尔
答案 0 :(得分:0)
假设您使用的是C#而不使用DataBinding。如果您使用的是DataBinding,我建议您不要使用它,因为您没有灵活性。
您可以遍历每一行和每列并获取或设置所需的数据。
这样的事情:
foreach (DataGridViewRow dgvRow in this.invoicesDataGridView.Rows)
{
foreach (DataGridViewColumn dgvColumn in this.invoicesDataGridView.Columns)
{
switch (dgvColumn.Index)
{
case 0: // Assuming Column 0 is the AmountPaid Column
// Get the AmountPaid value from the DataGridView
decimal amountPaid = Convert.ToDecimal(this.invoicesDataGridView.Rows[dgvRow.Index].Cells[dgvColumn.Index].Value);
break;
case 1: // ChangeDue Column
// Set the DataGridView ChangeDue value
this.invoicesDataGridView.Rows[dgvRow.Index].Cells[dgvColumn.Index].Value = 19.99m;
break;
}
}
}
您应该为每个列创建一个枚举类型,而不是使用 int 这样的整数类型,然后在这样的情况:
// Create enum type with the column names (This needs to be on the first lines of your code. Out side of your function)
enum invoicesDGV { InvoiceID, CustomerID, AmountPaid, ChangeDue, InvoiceTotal };
然后在 foreach 循环的开关语句中使用它:
case (int)invoicesDGV.AmountPaid: // for AmountPaid
而不是:
case 0:
这样,如果您向 DataGridView 添加新列,则只需编辑枚举类型变量。
我希望这会有所帮助。