2012-03-25 3 views
0

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

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

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

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

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

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

ответ

0

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

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

+0

Большое спасибо. – Wahtever

0

Набор DataKeyNames для GridView:

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

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