数据显示在计算中使用的DataGridView中

时间:2014-05-23 20:50:49

标签: datagridview

我想使用循环函数对DataGridView中的每一行进行一些计算。

由于我之前从未使用过DataGridView,而且编程技巧非常有限,我需要一些帮助。

我需要以这种格式提供五个主要部分。

  1. 第2列除以文本框(speed = CDbl(tbWinchSpeed.Text))

  2. 从1开始计算,然后添加了另一个文本框值(延迟= CDbl(tbSampleDelay.Text))

  3. 然后将2中的计算添加到时间(ts = DateTimePicker1.Value)并显示在第3列

  4. 2的计算结果是*,是一个组合框:

    cmbSampleRate.Items.Add("1") 
    cmbSampleRate.Items.Add("2")
    cmbSampleRate.Items.Add("4")
    cmbSampleRate.Items.Add("8")
    

    然后添加到第4栏

  5. 这需要使用if循环到网格上的每一行。如果第2列相同,则只添加上一行的时间延迟,填充第3列,然后*延迟(cmbSampleRate)并添加到第4列

  6. 我知道我需要的只是发现我很难理解编码

    此致

    丹尼尔

1 个答案:

答案 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 添加新列,则只需编辑枚举类型变量。

我希望这会有所帮助。