0

我在组合框中有一个姓名(员工)列表,用于添加到 dataGridView 中。我试图做到这一点,以便一旦员工在数据库中并显示在 dataGrid 中,他们的名字就会从组合框中删除,以免出现可添加到 dataGrid 中。我为该任务编写的代码看起来应该可以工作,但事实并非如此。

公共类主

Public techPhones As New PhonesDataSet.TechCompanyPhonesDataTable
Public techPhonesTableAdapter As New PhonesDataSetTableAdapters.TechCompanyPhonesTableAdapter
Public employees As New PhonesDataSet.EmployeesDataTable
Public empTableAdapter As New PhonesDataSetTableAdapters.EmployeesTableAdapter

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load, MyBase.Activated

    LoadForm()

End Sub

Private Sub cboEmployee_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboEmployee.SelectedIndexChanged
    lblOffice.Text = "Office: " + cboEmployee.SelectedItem("Office")
    lblPhone.Text = cboEmployee.SelectedItem("Phone")
    lblEmpID.Text = cboEmployee.SelectedItem("EmpID")
End Sub

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click, DataGridView1.CellDoubleClick

    Dim addEmp As New AddEmployee(cboEmployee.SelectedItem("Employee"), cboEmployee.SelectedItem("Office"), cboEmployee.SelectedItem("Phone"), _
                                  cboEmployee.SelectedItem("OfficeID"), cboEmployee.SelectedItem("EmpID"), cboEmployee.SelectedItem("Contract"), cboEmployee.SelectedItem("Returned"), _
                                  cboEmployee.SelectedItem("Loaner"))
    addEmp.ShowDialog()

End Sub

Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

    Dim name As String = DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(2).Value
    Dim employee As String

    For index As Integer = 0 To cboEmployee.Items.Count - 1 Step 1
        If cboEmployee.Items(index)("Employee") = name Then
            employee = cboEmployee.Items(index)("Employee")
            cboEmployee.SelectedIndex = index
        End If
    Next

End Sub

Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
    techPhonesTableAdapter.DeleteQuery((DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(1).Value))
    LoadForm()
End Sub

Private Sub LoadForm()
    techPhones = techPhonesTableAdapter.GetData()
    DataGridView1.DataSource = techPhones

    employees = empTableAdapter.GetData()

    cboEmployee.DataSource = employees
    cboEmployee.DisplayMember = ("Employee")
    cboEmployee.ValueMember = ("EmpID")

    lblOffice.Text = "Office: " + cboEmployee.SelectedItem("Office")
    lblPhone.Text = cboEmployee.SelectedItem("Phone")
    lblEmpID.Text = cboEmployee.SelectedItem("EmpID")
    cboEmployee.Focus()
    cboEmployee.SelectAll()
    lblRowCount.Text = "There are " + DataGridView1.RowCount.ToString + " phones accounted for."

    ' the code below is supposed to check every row in the data grid against the employee list in 
    ' cboEmployees and remove it from the list when they match
    With DataGridView1
        For indexDGV As Integer = 0 To .Rows.Count - 1 Step 1
            cboEmployee.Items.Remove(.Rows(indexDGV).Cells(2).Value)
        Next
    End With
    cboEmployee.Refresh()
End Sub

结束类

我也尝试过这个小变化:

 With DataGridView1
            For indexDGV As Integer = 0 To .Rows.Count - 1 Step 1
                For indexCBO As Integer = cboEmployee.Items.Count - 1 To 0 Step -1
                    If .Rows(indexDGV).Cells(2).Value = cboEmployee.Items(indexCBO)("Employee") Then
                        cboEmployee.Items.RemoveAt(indexCBO)
                    End If
                Next
            Next
        End With
4

2 回答 2

1

您甚至不需要遍历组合框项目。.Remove ( string ) 将起作用,如果您要删除的项目不存在,它将忽略该命令。

With DataGridView1
    For indexDGV As Integer = 0 To .Rows.Count - 1 Step 1
        cboEmployee.Items.Remove(.Rows(indexDGV).Cells(2).Value)
    Next
End With
于 2013-05-02T17:39:24.857 回答
0

像这样试试

With DataGridView1
    For indexDGV As Integer = 0 To .Rows.Count - 1 Step 1
        For indexCBO As Integer = cboEmployee.Items.Count - 1 To 0 Step -1
            If .Rows(indexDGV).Cells(2).Value.Equals(cboEmployee.Items(indexCBO).Tostring()) Then
                cboEmployee.Items.RemoveAt(indexCBO)
                Exit For
            End If
        Next
    Next
End With
于 2013-05-02T16:15:57.523 回答