MohammadIqbal Ответов: 3

как проверить повторяющиеся значения в ячейке datagridview


У меня есть datagridview . Я хочу, чтобы ограничить пользователя от ввода повторяющихся значений в столбце"UNITSLNO". если пользователь вводит значение в этот столбец повторно(более одного раза), то оно (повторно введенное) будет автоматически удалено.Я достиг этого с помощью следующего кода
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {           
            

            int count = dataGridView1.Rows.Count;


            for (int i = 0; i <= count - 3; i++)
            {              

         if (dataGridView1.Rows[i].Cells[0].Value.ToString() == dataGridView1.Rows[count - 2].Cells[0].Value.ToString())
                    {
                       
                            dataGridView1.Rows.RemoveAt(count - 2);

                            count = count - 1;            
                    }
               
            }
            



        }


this is working except certain problems such as when the column contains a single digit number (the column type is integer and bounded to MS Access 2007)it do not allows to enter any number which start with the same single digit number which already exist. ie if 3 already exist in this column when I try to enter 31 or 32 etc it do not allows me to completely enter the number . what actually happens is as soon as i enter 3 in the cell, dataGridView1_CellValueChanged event is invoked and the code to delete the repeated row is executed. I tried with cell_leave event too same result happened. what approach I should take to get rid of this .


заранее спасибо

3 Ответов

Рейтинг:
2

Bala Selvanayagam

Возможно, Вам придется использовать событие CellEndEdit


private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
       {

           try
           {
               if (e.ColumnIndex == 0) //VALIDATE FIRST COLUMN

                   for (int row = 0; row < dataGridView1.Rows.Count-1; row++)
                   {

                       if (dataGridView1.Rows[row].Cells[0].Value != null &&
                           row != e.RowIndex &&
                           dataGridView1.Rows[row].Cells[0].Value.Equals(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value))
                       {

                           MessageBox.Show("Duplicate");

                       } else
                       {

                           //Add To datagridview

                       }

                   }
           }
           catch (Exception ex)
           {

           }
       }


Рейтинг:
1

samaan2012

int count = dataGridView1.Rows.Count;


           for (int i = 0; i <= count - 1; i++)
           {
               if (i == count - 2) return;
               if (dataGridView1.Rows[i].Cells[2].Value.ToString() == dataGridView1.Rows[count - 2].Cells[2].Value.ToString())
               {

                   //dataGridView1.Rows.RemoveAt(count - 2);

                   MessageBox.Show("هذا الكود موجود من قبل في هذا الاذن !!!","إذن إضافة", MessageBoxButtons.OK,MessageBoxIcon.Information);
                   count = count - 1;
                   break;
               }

           }


Nelek

вы понимаете, что этот вопрос относится к 2011 году?

Рейтинг:
0

Member 10075558

Другое Решение Заключается В Следующем

Private Sub DGV_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DGV.CellEndEdit
Dim iCol = lvwBill.CurrentCell.ColumnIndex
Dim iRow = lvwBill.CurrentCell.RowIndex
Dim cc As Integer = 0
    If iCol = 0 Then
        For x = 0 To lvwBill.Rows.Count - 1
            If DGV.Rows(x).Cells(iCol).Value = DGV.CurrentRow.Cells(iCol).Value Then
                cc += 1
            End If
        Next
        If cc > 1 Then
            MessageBox.Show("Value Already Added in this Gridview")
            DGV.CurrentCell = DGV(iCol, iRow)
            Exit Sub
        End If
' You can make other checking or validations
    End If
End Sub


CHill60

Вопрос имеет возраст 4 года и помечен как C#. Вы предоставили решение VB, которое по сути является просто (плохим) переводом решения, опубликованного в 2011 году