如何检查 datagridview1 中的值是否等于或小于 listview1 中的值
How can I check if the value in datagridview1 is equal or less than the value in listview1
我有一个 Datagridview1
和一个 Listview1
当点击 datagridview 时,它会将数据传输到文本框,然后我输入一个项目的数量。
当按下保存时,它被保存在数据库中(ms Access)。
如果 datagridview 中的项目小于或等于它不会出错。但是,如果我再次单击该项目,它会要求相同的数量。
我想做的是检查 listview1
和 textbox(quantity)
中的项目是否显示一个消息框,如果 listview1.subitem
+ textbox(quantity)
小于该项目在 datagridview1
.
这是我的 dataGridView3 加载事件
public void dgvData()
{
try
{
con = new OleDbConnection(cs);
con.Open();
String sql = "SELECT StockID,Menu.MenuID,MenuName,Price,sum(Quantity) from Stocks,Menu where Stocks.MenuID=Menu.MenuId group by StockID,MenuName,Price,Menu.MenuID having sum(quantity > 0) order by MenuName";
cmd = new OleDbCommand(sql, con);
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
dataGridView3.Rows.Clear();
while (dr.Read() == true)
{
dataGridView3.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4]);
}
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
这是dataGridView3点击事件
private void dataGridView3_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
btnAddCart.Enabled = true;
txtQtyKilo.Enabled = true;
txtTotalPayment.Enabled = true;
AcceptButton = btnAddCart;
ErrorMenuName.Clear();
DataGridViewRow dr = dataGridView3.SelectedRows[0];
txtMenuID.Text = dr.Cells[1].Value.ToString();
txtMenuName.Text = dr.Cells[2].Value.ToString();
txtUnitPrice.Text = dr.Cells[3].Value.ToString();
txtOnHand.Text = dr.Cells[4].Value.ToString();
txtQtyKilo.Focus();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
最后是我在 ListView1 上插入数据的按钮
private void AddToCart_Click(object sender, EventArgs e)
{
dataGridView3.ClearSelection();
try
{
if (txtClientID.Text == "")
{
ErrorClientID.SetError(txtClientID, "Select A Client!");
return;
}
if (txtMenuName.Text == "")
{
ErrorMenuName.SetError(txtMenuName, "Select Menu!");
return;
}
if (txtQtyKilo.Text == "")
{
ErrorQtyPerKilo.SetError(txtQtyKilo, "Enter No. of Quantity Per Kilo!");
txtQtyKilo.Focus();
return;
}
int SaleQty = Convert.ToInt32(txtQtyKilo.Text);
if (SaleQty == 0)
{
ErrorQtyPerKilo.SetError(txtQtyKilo, "Input Must Be Greater Than 0");
txtQtyKilo.Focus();
return;
}
txtQtyKilo.Enabled = false;
btnSave.Enabled = true;
if (ListView1.Items.Count == 0)
{
ListViewItem lst = new ListViewItem();
lst.SubItems.Add(txtMenuID.Text);
lst.SubItems.Add(txtMenuName.Text);
lst.SubItems.Add(txtUnitPrice.Text);
lst.SubItems.Add(txtQtyKilo.Text);
lst.SubItems.Add(txtTotalAmount.Text);
ListView1.Items.Add(lst);
txtSubTotal.Text = subtot().ToString();
txtST.Text = Convert.ToInt32((Convert.ToInt32(txtSubTotal.Text) * Convert.ToDouble(txtTaxPer.Text) / 100)).ToString();
txtGrandTotal.Text = (Convert.ToInt32(txtSubTotal.Text) + Convert.ToInt32(txtST.Text)).ToString();
int val1 = 0;
int val2 = 0;
int.TryParse(txtGrandTotal.Text, out val1);
int.TryParse(txtTotalPayment.Text, out val2);
int I = (val1 - val2);
txtPaymentDue.Text = I.ToString();
texboxClear();
return;
}
for (int j = 0; j <= ListView1.Items.Count - 1; j++)
{
if (ListView1.Items[j].SubItems[1].Text == txtMenuID.Text)
{
ListView1.Items[j].SubItems[1].Text = txtMenuID.Text;
ListView1.Items[j].SubItems[2].Text = txtMenuName.Text;
ListView1.Items[j].SubItems[3].Text = txtUnitPrice.Text;
ListView1.Items[j].SubItems[4].Text = (Convert.ToInt32(ListView1.Items[j].SubItems[4].Text) + Convert.ToInt32(txtQtyKilo.Text)).ToString();
ListView1.Items[j].SubItems[5].Text = (Convert.ToInt32(ListView1.Items[j].SubItems[5].Text) + Convert.ToInt32(txtTotalAmount.Text)).ToString();
txtSubTotal.Text = subtot().ToString();
txtST.Text = Convert.ToInt32((Convert.ToInt32(txtSubTotal.Text) * Convert.ToDouble(txtTaxPer.Text) / 100)).ToString();
txtGrandTotal.Text = (Convert.ToInt32(txtSubTotal.Text) + Convert.ToInt32(txtST.Text)).ToString();
int val1 = 0;
int val2 = 0;
int.TryParse(txtGrandTotal.Text, out val1);
int.TryParse(txtTotalPayment.Text, out val2);
int I = (val1 - val2);
txtPaymentDue.Text = I.ToString();
texboxClear();
return;
}
}
ListViewItem lst1 = new ListViewItem();
lst1.SubItems.Add(txtMenuID.Text);
lst1.SubItems.Add(txtMenuName.Text);
lst1.SubItems.Add(txtUnitPrice.Text);
lst1.SubItems.Add(txtQtyKilo.Text);
lst1.SubItems.Add(txtTotalAmount.Text);
ListView1.Items.Add(lst1);
txtSubTotal.Text = subtot().ToString();
txtST.Text = Convert.ToInt32((Convert.ToInt32(txtSubTotal.Text) * Convert.ToDouble(txtTaxPer.Text) / 100)).ToString();
txtGrandTotal.Text = (Convert.ToInt32(txtSubTotal.Text) + Convert.ToInt32(txtST.Text)).ToString();
int val3 = 0;
int val4 = 0;
int.TryParse(txtGrandTotal.Text, out val3);
int.TryParse(txtTotalPayment.Text, out val4);
int I1 = (val3 - val4);
txtPaymentDue.Text = I1.ToString();
texboxClear();
return;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
这是我对 datagridview 的唯一验证。
private void txtSaleQty_Validating(object sender, CancelEventArgs e)
{
int val1 = 0;
int val2 = 0;
int.TryParse(txtOnHand.Text, out val1);
int.TryParse(txtQtyKilo.Text, out val2);
if (val2 > val1)
{
ErrorQtyPerKilo.SetError(txtQtyKilo, "Select Available Quantity or < Quantity");
txtQtyKilo.Text = "";
txtTotalAmount.Text = "";
txtQtyKilo.Focus();
return;
}
else
{
ErrorQtyPerKilo.Clear();
}
}
它只是检查 onhand.text 上的数量是否小于输入的数量。
我们在这里讨论的是获取列的列表视图值总和的代码,即 Quantity
将这些添加到 Textbox
值并与来自 [=15 的值进行比较=] 值。
double totl = 0;
protected void lvtest_DataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
Label lbltotalquantity= e.Item.FindControl("lblquantity") as Label;
totl += Convert.ToDouble(lbltotalquantity.Text);
}
}
protected void lvtest_PreRender(object sender, EventArgs e)
{
Label lblTot = this.lvProducts.FindControl("lblTotal") as Label;
lblTot.Text = totl.ToString(); ;
}
编辑:
// Optional ToDo: pass a int value indicating which "column" to add up
public decimal GetSubTotal()
{
decimal TotalValue = default(decimal);
decimal tmp = default(decimal);
// arrays and collections start at index(0) not (1)
for (int n = 0; n <= ListView1.Items.Count - 1; n++)
{
// ToDo: Not all items must have the same number of SubItems
// should also check SubItems Count >= 1 for each item
// try to get the value:
if (decimal.TryParse(ListView1.Items(n).SubItems(1).Text, tmp))
{
TotalValue += tmp;
}
}
return TotalValue;
}
更新答案
int num1 = 0; int i = 0; int j = 0; int h = 0;
for (int k = 0; k <= ListView1.Items.Count - 1; k++)
{
i = Convert.ToInt32(ListView1.Items[k].SubItems[4].Text);
}
int.TryParse(txtQtyKilo.Text, out j);
num1 = i + j;
textBox11.Text = Convert.ToString(num1);
int.TryParse(textBox11.Text, out h);
if (num1 <= Convert.ToInt32(txtOnHand.Text))
{
textBox11.Text = "";
}
else
{
txtQtyKilo.Text = "";
textBox11.Text = "";
MessageBox.Show("Must not be greater than the available menu!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
这是代码:
int num1 = 0; int i = 0; int j = 0; int h = 0;
for (int k = 0; k <= ListView1.Items.Count - 1; k++)
{
i = Convert.ToInt32(ListView1.Items[k].SubItems[4].Text);
}
int.TryParse(txtQtyKilo.Text, out j);
num1 = i + j;
textBox11.Text = Convert.ToString(num1);
int.TryParse(textBox11.Text, out h);
if (num1 <= Convert.ToInt32(txtOnHand.Text))
{
textBox11.Text = "";
}
else
{
txtQtyKilo.Text = "";
textBox11.Text = "";
MessageBox.Show("Must not be greater than the available menu!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
但
仍然出现错误
i = Convert.ToInt32(ListView1.Items[k].SubItems[4].Text);
如果我输入 10/100 的数量,然后在下一次输入时输入 100/100
MessageBox.Show("Must not be greater than the available menu!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
显示。但是如果我在我的第二个数量输入中输入 90/100,它会成功保存。我该怎么做才能防止这种情况发生?
我有一个 Datagridview1
和一个 Listview1
当点击 datagridview 时,它会将数据传输到文本框,然后我输入一个项目的数量。
当按下保存时,它被保存在数据库中(ms Access)。
如果 datagridview 中的项目小于或等于它不会出错。但是,如果我再次单击该项目,它会要求相同的数量。
我想做的是检查 listview1
和 textbox(quantity)
中的项目是否显示一个消息框,如果 listview1.subitem
+ textbox(quantity)
小于该项目在 datagridview1
.
这是我的 dataGridView3 加载事件
public void dgvData()
{
try
{
con = new OleDbConnection(cs);
con.Open();
String sql = "SELECT StockID,Menu.MenuID,MenuName,Price,sum(Quantity) from Stocks,Menu where Stocks.MenuID=Menu.MenuId group by StockID,MenuName,Price,Menu.MenuID having sum(quantity > 0) order by MenuName";
cmd = new OleDbCommand(sql, con);
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
dataGridView3.Rows.Clear();
while (dr.Read() == true)
{
dataGridView3.Rows.Add(dr[0], dr[1], dr[2], dr[3], dr[4]);
}
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
这是dataGridView3点击事件
private void dataGridView3_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
try
{
btnAddCart.Enabled = true;
txtQtyKilo.Enabled = true;
txtTotalPayment.Enabled = true;
AcceptButton = btnAddCart;
ErrorMenuName.Clear();
DataGridViewRow dr = dataGridView3.SelectedRows[0];
txtMenuID.Text = dr.Cells[1].Value.ToString();
txtMenuName.Text = dr.Cells[2].Value.ToString();
txtUnitPrice.Text = dr.Cells[3].Value.ToString();
txtOnHand.Text = dr.Cells[4].Value.ToString();
txtQtyKilo.Focus();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
最后是我在 ListView1 上插入数据的按钮
private void AddToCart_Click(object sender, EventArgs e)
{
dataGridView3.ClearSelection();
try
{
if (txtClientID.Text == "")
{
ErrorClientID.SetError(txtClientID, "Select A Client!");
return;
}
if (txtMenuName.Text == "")
{
ErrorMenuName.SetError(txtMenuName, "Select Menu!");
return;
}
if (txtQtyKilo.Text == "")
{
ErrorQtyPerKilo.SetError(txtQtyKilo, "Enter No. of Quantity Per Kilo!");
txtQtyKilo.Focus();
return;
}
int SaleQty = Convert.ToInt32(txtQtyKilo.Text);
if (SaleQty == 0)
{
ErrorQtyPerKilo.SetError(txtQtyKilo, "Input Must Be Greater Than 0");
txtQtyKilo.Focus();
return;
}
txtQtyKilo.Enabled = false;
btnSave.Enabled = true;
if (ListView1.Items.Count == 0)
{
ListViewItem lst = new ListViewItem();
lst.SubItems.Add(txtMenuID.Text);
lst.SubItems.Add(txtMenuName.Text);
lst.SubItems.Add(txtUnitPrice.Text);
lst.SubItems.Add(txtQtyKilo.Text);
lst.SubItems.Add(txtTotalAmount.Text);
ListView1.Items.Add(lst);
txtSubTotal.Text = subtot().ToString();
txtST.Text = Convert.ToInt32((Convert.ToInt32(txtSubTotal.Text) * Convert.ToDouble(txtTaxPer.Text) / 100)).ToString();
txtGrandTotal.Text = (Convert.ToInt32(txtSubTotal.Text) + Convert.ToInt32(txtST.Text)).ToString();
int val1 = 0;
int val2 = 0;
int.TryParse(txtGrandTotal.Text, out val1);
int.TryParse(txtTotalPayment.Text, out val2);
int I = (val1 - val2);
txtPaymentDue.Text = I.ToString();
texboxClear();
return;
}
for (int j = 0; j <= ListView1.Items.Count - 1; j++)
{
if (ListView1.Items[j].SubItems[1].Text == txtMenuID.Text)
{
ListView1.Items[j].SubItems[1].Text = txtMenuID.Text;
ListView1.Items[j].SubItems[2].Text = txtMenuName.Text;
ListView1.Items[j].SubItems[3].Text = txtUnitPrice.Text;
ListView1.Items[j].SubItems[4].Text = (Convert.ToInt32(ListView1.Items[j].SubItems[4].Text) + Convert.ToInt32(txtQtyKilo.Text)).ToString();
ListView1.Items[j].SubItems[5].Text = (Convert.ToInt32(ListView1.Items[j].SubItems[5].Text) + Convert.ToInt32(txtTotalAmount.Text)).ToString();
txtSubTotal.Text = subtot().ToString();
txtST.Text = Convert.ToInt32((Convert.ToInt32(txtSubTotal.Text) * Convert.ToDouble(txtTaxPer.Text) / 100)).ToString();
txtGrandTotal.Text = (Convert.ToInt32(txtSubTotal.Text) + Convert.ToInt32(txtST.Text)).ToString();
int val1 = 0;
int val2 = 0;
int.TryParse(txtGrandTotal.Text, out val1);
int.TryParse(txtTotalPayment.Text, out val2);
int I = (val1 - val2);
txtPaymentDue.Text = I.ToString();
texboxClear();
return;
}
}
ListViewItem lst1 = new ListViewItem();
lst1.SubItems.Add(txtMenuID.Text);
lst1.SubItems.Add(txtMenuName.Text);
lst1.SubItems.Add(txtUnitPrice.Text);
lst1.SubItems.Add(txtQtyKilo.Text);
lst1.SubItems.Add(txtTotalAmount.Text);
ListView1.Items.Add(lst1);
txtSubTotal.Text = subtot().ToString();
txtST.Text = Convert.ToInt32((Convert.ToInt32(txtSubTotal.Text) * Convert.ToDouble(txtTaxPer.Text) / 100)).ToString();
txtGrandTotal.Text = (Convert.ToInt32(txtSubTotal.Text) + Convert.ToInt32(txtST.Text)).ToString();
int val3 = 0;
int val4 = 0;
int.TryParse(txtGrandTotal.Text, out val3);
int.TryParse(txtTotalPayment.Text, out val4);
int I1 = (val3 - val4);
txtPaymentDue.Text = I1.ToString();
texboxClear();
return;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
这是我对 datagridview 的唯一验证。
private void txtSaleQty_Validating(object sender, CancelEventArgs e)
{
int val1 = 0;
int val2 = 0;
int.TryParse(txtOnHand.Text, out val1);
int.TryParse(txtQtyKilo.Text, out val2);
if (val2 > val1)
{
ErrorQtyPerKilo.SetError(txtQtyKilo, "Select Available Quantity or < Quantity");
txtQtyKilo.Text = "";
txtTotalAmount.Text = "";
txtQtyKilo.Focus();
return;
}
else
{
ErrorQtyPerKilo.Clear();
}
}
它只是检查 onhand.text 上的数量是否小于输入的数量。
我们在这里讨论的是获取列的列表视图值总和的代码,即 Quantity
将这些添加到 Textbox
值并与来自 [=15 的值进行比较=] 值。
double totl = 0;
protected void lvtest_DataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
Label lbltotalquantity= e.Item.FindControl("lblquantity") as Label;
totl += Convert.ToDouble(lbltotalquantity.Text);
}
}
protected void lvtest_PreRender(object sender, EventArgs e)
{
Label lblTot = this.lvProducts.FindControl("lblTotal") as Label;
lblTot.Text = totl.ToString(); ;
}
编辑:
// Optional ToDo: pass a int value indicating which "column" to add up
public decimal GetSubTotal()
{
decimal TotalValue = default(decimal);
decimal tmp = default(decimal);
// arrays and collections start at index(0) not (1)
for (int n = 0; n <= ListView1.Items.Count - 1; n++)
{
// ToDo: Not all items must have the same number of SubItems
// should also check SubItems Count >= 1 for each item
// try to get the value:
if (decimal.TryParse(ListView1.Items(n).SubItems(1).Text, tmp))
{
TotalValue += tmp;
}
}
return TotalValue;
}
更新答案
int num1 = 0; int i = 0; int j = 0; int h = 0;
for (int k = 0; k <= ListView1.Items.Count - 1; k++)
{
i = Convert.ToInt32(ListView1.Items[k].SubItems[4].Text);
}
int.TryParse(txtQtyKilo.Text, out j);
num1 = i + j;
textBox11.Text = Convert.ToString(num1);
int.TryParse(textBox11.Text, out h);
if (num1 <= Convert.ToInt32(txtOnHand.Text))
{
textBox11.Text = "";
}
else
{
txtQtyKilo.Text = "";
textBox11.Text = "";
MessageBox.Show("Must not be greater than the available menu!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
这是代码:
int num1 = 0; int i = 0; int j = 0; int h = 0;
for (int k = 0; k <= ListView1.Items.Count - 1; k++)
{
i = Convert.ToInt32(ListView1.Items[k].SubItems[4].Text);
}
int.TryParse(txtQtyKilo.Text, out j);
num1 = i + j;
textBox11.Text = Convert.ToString(num1);
int.TryParse(textBox11.Text, out h);
if (num1 <= Convert.ToInt32(txtOnHand.Text))
{
textBox11.Text = "";
}
else
{
txtQtyKilo.Text = "";
textBox11.Text = "";
MessageBox.Show("Must not be greater than the available menu!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
但
仍然出现错误i = Convert.ToInt32(ListView1.Items[k].SubItems[4].Text);
如果我输入 10/100 的数量,然后在下一次输入时输入 100/100
MessageBox.Show("Must not be greater than the available menu!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
显示。但是如果我在我的第二个数量输入中输入 90/100,它会成功保存。我该怎么做才能防止这种情况发生?