У меня есть кнопка в моей форме Win, которая проходит через каждую строку в моем DataGridView и при необходимости вызывает другую функцию.
Цикл и функция работают, однако, кажется, что строки пропускаются.Я выбрал 6 строк подряд, и только 3 были обработаны (в конце функции удаляется строка, только 3 из 6 были удалены).
Я подтвердил, что цикл вызывает только функцию 3из 6 раз, таким образом, проблемы, кажется, петля.
Что в мире происходит?
Вот код кнопки:
private void btnProcess_Click(object sender, EventArgs e) {
foreach (DataGridViewRow row in gridData.Rows) {
// If Approved to Buy
if (Convert.ToBoolean(row.Cells["Approve"].EditedFormattedValue) == true) {
if (row.Cells["Action"].Value.ToString() == "Buy") {
ApprovedBuyAction(row.Index);
}
}
}
} // End btnPurchase Function
Ивот вызываемая функция:
private void ApprovedBuyAction(int rowNum) {
using (SqlConnection conn = new SqlConnection(Global.connString)) {
conn.Open();
string sqlInsertQuery = "INSERT INTO PORG_Process " +
"(SessionID, Date, Type, BuyerID, SourceLoc, VendorID, SupplierID, Item, UOM, Qty, processFlag, deleteFlag, computerName, userName) VALUES " +
"(@SessionID, @Date, @Type, @BuyerID, @LocationID, @VendorID, @SupplierID, @Item, @UOM, @Qty, @processFlag, @deleteFlag, @computerName, @userName)";
using (SqlCommand sqlInsert = new SqlCommand(sqlInsertQuery, conn)) {
sqlInsert.Parameters.Add("@SessionID", SqlDbType.VarChar, 60).Value = hdnSessionID.Text;
sqlInsert.Parameters.Add("@Date", SqlDbType.VarChar, 60).Value = DateTime.Now.ToString();
sqlInsert.Parameters.Add("@Type", SqlDbType.VarChar, 10).Value = "PO";
sqlInsert.Parameters.Add("@BuyerID", SqlDbType.VarChar, 60).Value = hdnBuyerID.Text;
sqlInsert.Parameters.Add("@LocationID", SqlDbType.VarChar, 60).Value = gridData.Rows[rowNum].Cells["Location"].Value;
sqlInsert.Parameters.Add("@VendorID", SqlDbType.VarChar, 60).Value = gridData.Rows[rowNum].Cells["Vendor"].Value;
sqlInsert.Parameters.Add("@SupplierID", SqlDbType.VarChar, 60).Value = gridData.Rows[rowNum].Cells["Supplier"].Value;
sqlInsert.Parameters.Add("@Item", SqlDbType.VarChar, 60).Value = gridData.Rows[rowNum].Cells["Item"].Value;
sqlInsert.Parameters.Add("@UOM", SqlDbType.VarChar, 10).Value = gridData.Rows[rowNum].Cells["UOM"].Value;
sqlInsert.Parameters.Add("@Qty", SqlDbType.VarChar, 60).Value = gridData.Rows[rowNum].Cells["FinalQty"].Value;
sqlInsert.Parameters.Add("@processFlag", SqlDbType.Int).Value = 1;
sqlInsert.Parameters.Add("@deleteFlag", SqlDbType.Int).Value = 0;
sqlInsert.Parameters.Add("@computerName", SqlDbType.VarChar, 60).Value = hdnMachineName.Text;
sqlInsert.Parameters.Add("@userName", SqlDbType.VarChar, 60).Value = hdnUserName.Text;
sqlInsert.CommandType = CommandType.Text;
sqlInsert.ExecuteNonQuery();
}
string sqlUpdateQuery = "UPDATE PorgReqs SET processFlag = 1 WHERE id = @TableID";
using (SqlCommand sqlUpdate = new SqlCommand(sqlUpdateQuery, conn)) {
sqlUpdate.Parameters.Add("@TableID", SqlDbType.Int).Value = gridData.Rows[rowNum].Cells["id"].Value;
sqlUpdate.CommandType = CommandType.Text;
sqlUpdate.ExecuteNonQuery();
}
}
// Remove the Row from the Grid
gridData.Rows.RemoveAt(rowNum);
} // End ApprovedBuyAction Function