【问题标题】:How I can set the index of Datagridview to 0如何将 Datagridview 的索引设置为 0
【发布时间】:2019-05-28 06:23:23
【问题描述】:

如何将 DataGridView 的索引设置为 0?

我开发了一个药房软件,我想通过添加新行将 TextBoxes 中的值添加到 DataGridView 中。它正在工作,但问题是当我使用此代码清除 DataGridView 的值时

dgvSoldMedicineInfo.Rows.Clear()

然后当我尝试前面的过程时,它在 VB.NET 中显示此错误

索引超出范围,必须为非负数且小于集合的大小。参数名称:索引

代码:

Dim rowcounter As Integer = 0

Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click

    dgvSoldMedicineInfo.Rows.Add()

    dgvSoldMedicineInfo.Rows(rowcounter).Cells("ColumnBarcodeNo").Value = txtBarcodeNo.Text
    dgvSoldMedicineInfo.Rows(rowcounter).Cells("ColumnName").Value = dgvSale.CurrentRow.Cells(2).Value
    dgvSoldMedicineInfo.Rows(rowcounter).Cells("ColumnQuantity").Value = txtQuantity.Text
    dgvSoldMedicineInfo.Rows(rowcounter).Cells("ColumnSalePrice").Value = txtSalePrice.Text
    dgvSoldMedicineInfo.Rows(rowcounter).Cells("ColumnAmount").Value = txtTotalAmount.Text
    dgvSoldMedicineInfo.Rows(rowcounter).Cells("ColumnReject").Value = "Reject"
    dgvSoldMedicineInfo.Rows(rowcounter).Cells("ColumnStockID").Value = dgvSale.CurrentRow.Cells(0).Value
    dgvSoldMedicineInfo.Rows(rowcounter).Cells("ColumnStockQuantity").Value = dgvSale.CurrentRow.Cells(3).Value

    System.Math.Max(System.Threading.Interlocked.Increment(rowcounter), rowcounter - 1)
End Sub

【问题讨论】:

  • 您可以像这样添加 Row dgvSoldMedicineInfo.Rows.Add(txtBarcodeNo.Text,dgvSale.CurrentRow.Cells(2).Value,txtQuantity.Text...等等) 无需添加行然后单独填充单元格,仅当您需要编辑该单个单元格时才执行 dgvSoldMedicineInfo(y,x).value=something 。为什么需要行计数器变量?您可以直接使用 dgvSoldMedicineInfo.Rows.Count 获取行数

标签: vb.net


【解决方案1】:

在这种情况下,rowcounter 变量确实没有意义,并且一遍又一遍地继续使用 dgvSoldMedicineInfo.Rows(rowcounter) 是一种不好的形式。正确的做法是这样的:

Dim rowIndex = dgvSoldMedicineInfo.Rows.Add()
Dim row = dgvSoldMedicineInfo.Rows(rowIndex)
Dim cells = row.Cells

cells("ColumnBarcodeNo").Value = txtBarcodeNo.Text
cells("ColumnName").Value = dgvSale.CurrentRow.Cells(2).Value
'etc.

也就是说,当Add 方法被重载并且会预先接受所有单元格值时,为什么要这样做?

dgvSoldMedicineInfo.Rows.Add(txtBarcodeNo.Text,
                             dgvSale.CurrentRow.Cells(2).Value,
                             ...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多