2015-10-21 65 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

您也可以尝试做一个foreach循环,所以你不必惹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 = new List ();'使行的列表被删除,之后我遍历该列表以实际删除它们'foreach(DataGridViewRow在deleteRows中行)''。所以这个代码片段应该可以插入并播放给你。 – Huntt

+0

哟这家伙!!!!非常感谢!!!! –

0

检索网格行的代码,您没有使用。你也不需要i ++因为你已经在for循环中做了。

row = EditdataGridView1.Rows[i]; 

删除我++的语句从如果条件。

+0

谢谢我现在可以删除,除了一行,即如果我选择3行,其中一个拒绝删除 –

相关问题