Получить несколько строк DataKeys из gridview - PullRequest
2 голосов
/ 06 марта 2012

В настоящее время у меня есть событие «Нажатие кнопки», которое берет DataKey из строки в таблице данных (с помощью флажка) и назначает его переменной INT для обновления индивида в базе данных.Все работает нормально, когда я отмечаю только один флажок и запускаю обновление.Однако мне нужно, чтобы у пользователя была возможность выбрать все флажки и взять все эти Datakeys и назначить их одной и той же переменной

INT oNewParentID

Как я уже сказал, все работает нормально, когда выбран только 1 флажок.Я предполагаю, что спрашиваю, как получить 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

1 Ответ

0 голосов
/ 17 июля 2014

Реорганизованный код.Добавлен перерыв ко второму foreach при условии, что нет никакой причины для ReasignInvidual несколько раз просто назначить его последнему выбранному менеджеру.

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);
        }

}
...