2012-03-05 67 views
2

目前我有一个Button Click事件,它从Datagrid中的一行(通过复选框)获取DataKey并将其分配给INT变量以更新数据库中的个人。当我只选中1复选框并运行更新时,一切正常。不过,我需要用户必须选择所有的复选框,并采取所有这些Datakeys并将其分配给同一个变量从gridview获取多行DataKeys

INT oNewParentID 

就像我说的时候只有1复选框被选中evrything正常工作的选项。我想我正在问如何获取Uknoiwn数量的Datakeys或所有复选框选择的所有DataKeys,并将它们存储在上面的变量中以运行所选个人的更新。这是到目前为止我的按钮单击事件被选择工作1个复选框:

protected void imgbtnReassgin_Click(object sender, ImageClickEventArgs e) 
{ 
    foreach (GridViewRow row in gvSalesmanCustomers.Rows) 
    { 
     CheckBox cb = (CheckBox)row.FindControl("chkSalesCustSelector"); 
     if (cb != null && cb.Checked) 
     { 


      int oIndividualID = Convert.ToInt32((gvSalesmanCustomers.DataKeys[row.RowIndex].Value)); 



      foreach (GridViewRow r in gvSalesmanByManager.Rows) 
      { 
       CheckBox chkBox = (CheckBox)r.FindControl("chkManagerSalesSelector"); 
       if (chkBox != null && chkBox.Checked) 
       { 

        int oNewParentID = Convert.ToInt32((gvSalesmanByManager.DataKeys[r.RowIndex].Value)); 



        Individual ind = new Individual(); 
        ind.ReassignIndividual(oIndividualID, oNewParentID); 

        chkBox.Checked = false; 
        cb.Checked = false; 

       } 


      } 



     } 


    } 

} 

而且她是我的更新存储过程:

CREATE DEFINER=`root`@`%` PROCEDURE `reassign_Individual`(
IN oIndividualID  int(11), 
IN oNewParentID   int(11) 
) 
BEGIN 
Update intelliair.individual 
set ParentID = oNewParentID 
Where IndividualID = oIndividualID;END 

My DataGridViews UI

回答

0

重新组织的代码。 假设没有理由多次将ReasignInvidual分配给最后一个选定的管理器,则将其分配到第二个foreach

protected void imgbtnReassgin_Click(object sender, ImageClickEventArgs e) 
{ 
    List<int> ids = new List<int>(); 
    foreach (GridViewRow row in gvSalesmanCustomers.Rows) 
    { 
     CheckBox cb = (CheckBox)row.FindControl("chkSalesCustSelector"); 
     if (cb != null && cb.Checked) 
     { 
      int oIndividualID = Convert.ToInt32((gvSalesmanCustomers.DataKeys[row.RowIndex].Value)); 
      ids.Add(oIndividualID); 

      cb.Checked = false; 

     } 
    } 

    int oNewParentID = 0; 
    foreach (GridViewRow r in gvSalesmanByManager.Rows) 
    { 
     CheckBox chkBox = (CheckBox)r.FindControl("chkManagerSalesSelector"); 
     if (chkBox != null && chkBox.Checked) 
     { 
      oNewParentID = Convert.ToInt32((gvSalesmanByManager.DataKeys[r.RowIndex].Value)); 
      chkBox.Checked = false; 
      break; //no reason to go with the same logic to next records 
      //if you want to uncheck all the checkboxes continue with specific code just for that purpose 
     } 
    } 


    if (ids.Count > 0 && oNewParentID > 0) 
     foreach(var id in ids) 
     { 
      Individual ind = new Individual(); 
      ind.ReassignIndividual(id, oNewParentID); 
     } 

}