Datagridview неоднократно добавляет столбец флажка

#vb.net

Вопрос:

Я использую Visual Studio 2017, SQL Server 2016. Проблема в том, что я добавил столбец флажка в свой DataGridView, но он повторяется 5 раз

Я сделал код по ссылке ниже. Это дает результат, но почему он повторяет столбец флажка? Я вызываю функцию в ComboBox SelectedIndexChanged, так есть ли с ней какие-либо проблемы? Что мне делать?

 Private Sub GetRecords()
        Dim query As String = " select distinct t.CPTCode,t.ServiceName,t.DepartmentName,t.SubName,t.Name as Company,t.bedcatename,t.ServiceCharge "
        query  = " from tariffpsri t "
        query  = " inner join psrirate p on t.Validid= p.Validid "
        query  = " inner join ItemOfService i on t.ServiceId = i.ServiceId "
        query  = " where t.DepartmentName= '"   ComboBox2.Text   "' "
        query  = " And t.companyid = 1 And i.Active = 1 "
        query  = " And Convert(varchar, p.ValidFrom, 111) = '"   ComboBox1.Text   "' "
        query  = " order by CPTCode "

        conn = GetConnect()
        conn.Open()
        Using cmd As SqlCommand = New SqlCommand(query, conn)
            'MsgBox(query)
            cmd.CommandType = CommandType.Text
            Using sda As SqlDataAdapter = New SqlDataAdapter(cmd)
                Using ds As New DataSet1
                    Using dt As DataTable = New DataTable()

                        sda.Fill(dt)

                        DataGridView1.DataSource = dt

                    End Using
                End Using
                End Using
            End Using
            conn.Close()
        Dim headerCellLocation As Point = Me.DataGridView1.GetCellDisplayRectangle(0, -1, True).Location

        'Place the Header CheckBox in the Location of the Header Cell.
        headerCheckBox.Location = New Point(headerCellLocation.X   8, headerCellLocation.Y   2)
        headerCheckBox.BackColor = Color.White
        headerCheckBox.Size = New Size(18, 18)

        'Assign Click event to the Header CheckBox.
        AddHandler headerCheckBox.Click, AddressOf HeaderCheckBox_Clicked
        DataGridView1.Controls.Add(headerCheckBox)

        'Add a CheckBox Column to the DataGridView at the first position.
        Dim checkBoxColumn As DataGridViewCheckBoxColumn = New DataGridViewCheckBoxColumn()
        checkBoxColumn.HeaderText = ""
        checkBoxColumn.Width = 30
        checkBoxColumn.Name = "checkBoxColumn"
        DataGridView1.Columns.Insert(0, checkBoxColumn)
        'DataGridView1.Columns.Add(checkBoxColumn)
        'Assign Click event to the DataGridView Cell.
        AddHandler DataGridView1.CellContentClick, AddressOf DataGridView_CellClick
    End Sub
    Private Sub HeaderCheckBox_Clicked(ByVal sender As Object, ByVal e As EventArgs)
        'Necessary to end the edit mode of the Cell.
        DataGridView1.EndEdit()

        'Loop and check and uncheck all row CheckBoxes based on Header Cell CheckBox.
        For Each row As DataGridViewRow In DataGridView1.Rows
            Dim checkBox As DataGridViewCheckBoxCell = (TryCast(row.Cells("checkBoxColumn"), DataGridViewCheckBoxCell))
            checkBox.Value = headerCheckBox.Checked
        Next
    End Sub
    Private Sub DataGridView_CellClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs)
        'Check to ensure that the row CheckBox is clicked.
        If e.RowIndex >= 0 AndAlso e.ColumnIndex = 0 Then

            'Loop to verify whether all row CheckBoxes are checked or not.
            Dim isChecked As Boolean = True
            For Each row As DataGridViewRow In DataGridView1.Rows
                If Convert.ToBoolean(row.Cells("checkBoxColumn").EditedFormattedValue) = False Then
                    isChecked = False
                    Exit For
                End If
            Next

            headerCheckBox.Checked = isChecked
        End If
    End Sub
    
Am calling above sub on combobox1 and combobox2 selectedindexchange

https://www.aspsnippets.com/Articles/Check-all-and-Uncheck-all-CheckBox-in-DataGridView-in-Windows-Application-using-C-and-VBNet.aspx

[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/CSzdM.png
 

Комментарии:

1. Введите свой код в свой вопрос, пожалуйста

Ответ №1:

Одна рекомендация, которую я могу дать, не видя точно, какой код вы написали, состояла бы в том, чтобы поместить точку останова в

 BindGrid()
 

подменю, чтобы узнать, вызывается ли он несколько раз.

Поскольку он добавляет флажок в эту подпрограмму, если бы он вызывался несколько раз, он добавлял бы флажок для каждого вызова.

Если вы поделитесь написанным вами кодом, мы сможем предоставить более подробную помощь.

Комментарии:

1. Теперь я добавил весь свой код , который я написал, пожалуйста, помогите мне исправить

2. Спасибо вам за это! Не могли бы вы отредактировать верхний раздел, чтобы он также был включен в форматирование кода? У меня недостаточно высокий ранг в SO, чтобы это исправить.

3. Я отправил запрос на редактирование для очистки кода. В то же время, не могли бы вы поместить точку останова в свою подстановку GetRecords ()? Мне интересно, стреляют ли из него несколько раз.