Как удалить несколько строк в сетке с помощью флажка? - PullRequest
0 голосов
/ 25 марта 2012

У меня есть сетка с флажком, и я пытаюсь выполнить множественное удаление, используя этот код:

    protected void deleteUsers(object sender, EventArgs e) //deleting the selected users
{
    foreach (GridViewRow row in clientGrid.Rows) 
    {
        CheckBox selectBox = (CheckBox)row.FindControl("deleteUser");

        if (selectBox != null && selectBox.Checked) 
        {
            string bank, customerId, tMain, tSub;

            bank = bankName.InnerText;
            tMain = bank + "_main";
            tSub = bank + "_sub";

            customerId = Convert.ToString(clientGrid.DataKeys[row.RowIndex].Value);

            deleteSelected(tMain, tSub, customerId).ExecuteNonQuery();

            clientGrid.DataSource = getAllClients();
            clientGrid.DataBind();
        }
    }
}

, а вот sqlCommand:

    protected SqlCommand deleteSelected (string Tmain, string Tsub, string customerId) //the sql command for deleting
{
    string connection, commandSyntax;
    connection = ConfigurationManager.ConnectionStrings["localsqlserver"].ConnectionString;
    commandSyntax = "DELETE FROM [" + Tmain + "] FROM [" + Tsub + "] t1 " + 
                        "LEFT JOIN [" + Tmain + "] t2 ON t1.customer_id = t2.customer_id " +
                            "WHERE t1.customer_id = @customer_id" ;

    SqlConnection conn = new SqlConnection(connection);
    SqlCommand cmd = new SqlCommand(commandSyntax, conn);
    cmd.Parameters.AddWithValue("@customer_id", customerId);


    conn.Open();

    return cmd;
}

это прекрасно работает при удалении только одного проверенного пользователя, но , если я проверяю более одного, я получаю эту ошибку:

Индекс был вне диапазона.Должен быть неотрицательным и меньше размера коллекции.
Имя параметра: индекс

Я установил ключ данных gridview для столбца customer_id, который содержит guid.

Я использую asp.net 4.0, в чем проблема?

Ответы [ 2 ]

0 голосов
/ 13 июня 2013

Установить DataKeyNames для GridView:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="customer_id"></asp:GridView>

0 голосов
/ 25 марта 2012

Вы испытываете это, потому что вы перепривязываете свою сетку данных внутри цикла foreach, что приводит к изменению размера коллекции, которую вы в данный момент просматриваете в данный момент, что, в свою очередь, приводит к потере индекса.

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

...