Приращение количество на единицу (+1), если идентификатор является продукт существует в текущем DataGridViewПриращение количество на единицу (+1), если идентификатор является продукт существует в текущем DataGridView
Мой DataGridView имеет 9 столбцов:
Column 1 = Edit_Checkbox Column 2 = ItemCount
Column 3 = DGV_PRODUCT_ID Column 4 = DGV_PRODUCT_DESC
Column 5 = DGV_UNIT_PRICE Column 6 = DGV_QUANTITY
Column 7 = DGV_DISCOUNT Column 8 = DGV_TOTAL_PRICE
Column 9 = DGV_NOTES
Я пытаюсь увеличиваем количество на единицу (+1), если идентификатор продукта существует в текущем DataGridView
Мой код ниже работает нормально, но у меня есть вопрос, который, когда существует же идентификатор продукта будет увеличиваем Количество на единицу, если процесс выполняется, но если я ввел идентификатор продукта не последовательным образом, он не будет увеличивать количество на единицу, а вместо этого добавит новую строку в datagridview.
Например:
Введите продукт идентификационный номер 1003 Количество 2 шт будет 2
Введите ID номер продукта 3000 Количество 1 шт будет 1
Введите номер продукта ID 1003 1 шт количество будет по-прежнему равно 1, когда продукт уже существует в datagridview. Как мне избежать этого?
private void SelectedProductData()
{
int ItemCount = DGV_INVOICE.Rows.Count;
bool ProductIDExist = false;
string connstr = @"Data Source=orcl; User Id=user; password=pwd;";
string cmdtxt = @"SELECT PRODUCT_ID,
PRODUCT_DESC,
UNIT_PRICE
FROM WAREHOUSE
WHERE PRODUCT_ID = :P_Product_ID";
try
{
using (OracleConnection conn = new OracleConnection(connstr))
using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
{
conn.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = cmdtxt;
cmd.Parameters.Add(new OracleParameter(":P_Product_ID", OracleDbType.Varchar2)).Value = TB_Product_ID.Text;
OracleDataReader oraReader = cmd.ExecuteReader();
while (oraReader.Read())
{
ItemCount++;
RowCountLabel.Text = ItemCount.ToString();
DataGridViewRow dgvRow = new DataGridViewRow();
foreach (DataGridViewRow ItemRow in DGV_INVOICE.Rows)
{
if (Convert.ToString(ItemRow.Cells[2].Value) == TB_Product_ID.Text)
{
MessageBox.Show(Convert.ToString(ItemRow.Cells[2].Value) + " 1 " + TB_Product_ID.Text);
ProductIDExist = true;
break;
}
}
if (ProductIDExist)
{
MessageBox.Show("2");
//dgvRow.Cells[5].Value = Convert.ToString(1 + Convert.ToInt64(dgvRow.Cells[5].Value));
DGV_INVOICE.Rows[dgvRow.Index].Cells[5].Value = Convert.ToString(1 + Convert.ToInt64(dgvRow.Cells[5].Value));
}
else
{
MessageBox.Show("3");
//Add the row to grid view for the first time
dgvRow.Cells.Add(new DataGridViewCheckBoxCell()); //Edit_Checkbox index 0
dgvRow.Cells[0].Value = false;
dgvRow.Cells.Add(new DataGridViewTextBoxCell()); //ItemCount index 1
dgvRow.Cells[1].Value = ItemCount;
dgvRow.Cells.Add(new DataGridViewTextBoxCell()); //DGV_PRODUCT_ID index 2
dgvRow.Cells[2].Value = oraReader.GetValue(0);
dgvRow.Cells.Add(new DataGridViewTextBoxCell()); //DGV_PRODUCT_DESC index 3
dgvRow.Cells[3].Value = oraReader.GetString(1);
dgvRow.Cells.Add(new DataGridViewTextBoxCell()); //DGV_UNIT_PRICE index 4
dgvRow.Cells[4].Value = oraReader.GetValue(2);
dgvRow.Cells.Add(new DataGridViewTextBoxCell()); //DGV_QUANTITY index 5
dgvRow.Cells[5].Value = "1";
dgvRow.Cells.Add(new DataGridViewTextBoxCell()); //DGV_DISCOUNT index 6
dgvRow.Cells[6].Value = "0";
//dgvRow.Cells.Add(new DataGridViewTextBoxCell()); //DGV_TOTAL_PRICE index 7
//dgvRow.Cells[7].Value = "0";
//dgvRow.Cells.Add(new DataGridViewTextBoxCell()); //DGV_NOTES index 8
//dgvRow.Cells[8].Value = "-";
DGV_INVOICE.Rows.Add(dgvRow);
dgvRow.Selected = true;
}
}
}
}
catch (Exception EX)
{
MessageBox.Show(EX.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
TB_ORDER_NOTE.Text = EX.Message; /* Testing Purpose */
}
}
Вы говорите, что ваша сетка имеет 4 колонки, но вы ссылаетесь на 6-й столбец с линией 'DGV_INVOICE.Rows [ItemRow.Index] .Cells [5] .Value =. .. 'как будто его шестой, а не третий, столбец, который содержит количество. Почему это? Также (в предположении 4 столбца) в операторе 'if' не будет' ItemRow.Cells [2] 'ссылаться на количество, а не на цену? Почему бы не проверить по id, а не по цене? – theKunz
@ theKunz его просто пример, чтобы объяснить мой случай – sam
Можем ли мы увидеть фактический код, который вы используете? – theKunz