0

国が既に Datagrid に表示されている場合、ユーザーが国をデータベースに追加できないようにしたいと考えています。

Datagrid には、フォーム読み込みイベントで国が事前に読み込まれます。

私は次のコード (以下) を持っていますが、添字が範囲外であり、負にすることはできないというエラーが表示されます。

Dim appear As Integer
Dim colcount As Integer
Dim rowcount As Integer
colcount = all_countries.ColumnCount
rowcount = all_countries.RowCount
For i = 0 To rowcount
  For j = 0 To colcount
    If (new_country.Text = all_countries.Item(colcount, rowcount).Value) Then
      MsgBox("Country Exists", 0)
      appear = 1
    End If
  Next
Next
4

2 に答える 2

0

CellValidating次のようなイベントを使用できます。

Private Sub all_countries_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles all_countries.CellValidating
    Dim headerText = all_countries.Columns(e.ColumnIndex).HeaderText
    ' Abort validation if cell is not in the country column '
    If Not headerText.Equals("Country") Then Return

    ' Confirm that the cell is not empty '
    Dim thisCountry As String = e.FormattedValue.ToString()
    If String.IsNullOrEmpty(thisCountry) Then
        all_countries.Rows(e.RowIndex).ErrorText = "Country must not be empty"
        e.Cancel = True
    Else
        For Each row As DataGridViewRow In all_countries.Rows
            If row.Index <> e.RowIndex Then
                Dim countryCell = row.Cells(e.ColumnIndex)
                If thisCountry = countryCell.FormattedValue.ToString() Then
                    all_countries.Rows(e.RowIndex).ErrorText = "Country must be unique"
                    e.Cancel = True
                    Exit For
                End If
            End If
        Next
    End If
End Sub
于 2013-03-12T12:31:07.363 に答える
0

次のことを試してください。

Dim X as Integer
For X = 0 to DataGridView.Rows.Count - 1
   If DataGridView.Rows(X).Cells("ColumnName").Value = new_country.Text Then
      MsgBox("Country Exists", 0)
      appear = 1
   End If
Next

注:「カウント - 1」。それがあなたのコードで問題を引き起こしている可能性があると思います。これが役立つことを願っています

于 2013-03-13T17:45:07.410 に答える