2015-10-21 2 views
0

вот код для этого загружает DataGridView.Как удалить несколько элементов из DataGridView с помощью столбца флажка

private void btnLoaddata_Click(object sender, EventArgs e) 
{ 
    AddCheckBoxforDataGridView(); 
    try 
    { 
     conDB.Open(); 
     OleDbCommand command = new OleDbCommand(); 
     command.Connection = conDB; 
     command.CommandText = "select CWDetails,CCSpn_CODE as 'SPN CODE',CCFname as 'First Name',CCLname as 'Last Name',CCMname as 'Middle Name',CCDOB as 'Date Of Birth',CCgender as 'Gender',CCSchool as 'School',CaClass as 'Class',CCVillage as 'Village',CCSiblings as 'Number Of Siblings',CCGuardian as 'Guardian',CCContact as 'Contact',CCcurrentDt as 'Date Of Entry' from abaanaCC"; 
     // command.Parameters.Add(new OleDbParameter("@IMG", imageBt)); 
     // command.ExecuteNonQuery(); 
     //MessageBox.Show("Record Saved"); 

     OleDbDataAdapter da = new OleDbDataAdapter(command); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     EditdataGridView1.DataSource = dt; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Unable to Load Data"); 
    } 
    conDB.Close(); 
} 

вот код, который добавляет checkbox столбец в DataGridView

private void AddCheckBoxforDataGridView() 
{ 
    DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn() 
    { 
     Name = "Check" 
    }; 
    EditdataGridView1.Columns.Add(col); 
} 

Вот метод создан для удаления. Колонка CWDetails находится в базе данных

public int DeleteMult(int CWDet) 
{ 
    conDB.Open(); 
    OleDbCommand command = new OleDbCommand(); 
    command.Connection = conDB; 
    string query = "delete from abaanaCC where CWDetails = " + CWDet + ""; 
    command.CommandText = query; 
    int res = command.ExecuteNonQuery(); 
    conDB.Close(); 
    return res; 
} 

primary key Вот код для кнопки удаления del_Mult, который не работает

private void del_Mult_Click(object sender, EventArgs e) 
{ 
    DataGridViewRow row = new DataGridViewRow(); 
    for (int i = 0; i < EditdataGridView1.Rows.Count; i++) 
    { 
     row = EditdataGridView1.Rows[1]; 
     if (Convert.ToBoolean(row.Cells[0].Value) == true) 
     { 
      int id = Convert.ToInt16(row.Cells[1].Value); 
      DeleteMult(id); 
      EditdataGridView1.Rows.Remove(row); 
      i++;      
     } 
    } 
} 

ответ

0

Вы также можете попробовать сделать это в цикле Еогеасп так что вам не придется возиться с int i, как это:

private void del_Mult_Click(object sender, EventArgs e) 
{ 
    List<DataGridViewRow> deleteRows = new List<DataGridViewRow>(); 

    foreach(DataGridViewRow row in EditdataGridView1.Rows) 
    { 
     if(Convert.ToBoolean(row.Cells[0].Value) == true) 
     { 
      int id = Convert.ToInt16(row.Cells[1].Value); 
      DeleteMult(id); 
      deleteRows.Add(row); 
     } 
    } 

    foreach(DataGridViewRow row in deleteRows) 
    { 
     EditdataGridView1.Rows.Remove(row); 
    } 
} 

Хотя вы должны составить список строк, которые вы хотите удалить, поскольку вы не можете удалять строки, пока вы заняты итерацией по ним.

+0

, но как сделать список, так как я использую столбец флажка для выбора строк для удаления –

+0

@ElijahAyeeta. Все это в ответе: «List deleteRows = новый List ();' делает список для строк удаляемым, а затем я повторяю этот список, чтобы удалить их 'foreach (строка DataGridViewRow в deleteRows)'. Поэтому этот фрагмент кода должен быть подключен и играть для вас. – Huntt

+0

лет парню !!!! большое спасибо!!!! –

0

Вы не используете я для извлечения строк сетки. Также вам не требуется i ++, так как вы делаете это уже в цикле.

row = EditdataGridView1.Rows[i]; 

Удалить я ++ заявление от если состояния.

+0

спасибо, что теперь я могу удалить, кроме одной строки, то есть, если я выбрал 3 строки, один из них отказывается удалить –

Смежные вопросы