我有7列(代码,销售人员,描述,大小,数量,价格,金额)。 如果记录相同,我如何在QTY列中增加。如果数量为1之前,这应为2。
这是代码
private void MakeDataTable()
{
dt.Columns.Add("Code");
dt.Columns.Add("Sales Man");
dt.Columns.Add("Description");
dt.Columns.Add("Size");
dt.Columns.Add("QTY");
dt.Columns.Add("Price");
dt.Columns.Add("Amount");
}
private void AddToDataTable()
{
while (sdr.Read())
{
DataRow dr = dt.NewRow();
if (quantity != 0)
{ dr["Code"] = sdr["bnSKU"].ToString();
dr["Sales Man"] = txtsmCode.Text;
dr["Description"] = cat_brnd.ToString();
dr["Size"] = sdr["nSizeCode"].ToString();
dr["QTY"] = txtqnt.Text;
dr["Price"] = sdr["strSalePrice"].ToString();
dr["Amount"] = amount.ToString();
dt.Rows.Add(dr);
}
}
cmd.Parameters.Clear();
sdr.Close();
con.Close();
}
}
private void BindGrid()
{
gvsale.DataSource = dt;
gvsale.DataBind();
}
protected void gvsale_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Cells[0].Visible = false;
e.Row.Cells[1].Visible = false;}
答案 0 :(得分:0)
我并不完全明白你的意思,但由于你想根据标识符列增加一个单元格,我认为你应该按照这些步骤进行:
1-获取DataGridView中所有代码的列表:此方法为您提供包含DataGridView中所有代码的列表
/// <summary>
/// Return a list of string containing all the codes
/// </summary>
/// <returns>List of codes</returns>
private List<string> GetListOfCodes()
{
return
(from DataGridViewRow row in gvsale.Rows
select (string)row.Cells[0].Value).ToList();
}
2-检查您要添加的代码是否已存在:此方法检查您要添加的代码是否已存在,如果是,则返回其索引,如果否:返回-1。
/// <summary>
/// Return the index row of a code if it exits, if not return -1
/// </summary>
/// <param name="code">the code you are looking for</param>
/// <returns>its index</returns>
private int ReturnIndexOfCodeIfAlreadyExists(string code)
{
var list = GetListOfCodes();
if (list.Contains(code))
{
return list.IndexOf(code);
}
return -1;
}
3-使用行索引增加行中的QTY的方法:这里增加参数中传递的行索引中的QTY值的方法:
/// <summary>
/// Increment the QTA in that the row using the index
/// </summary>
/// <param name="index">index of the row you want to increment</param>
private void IncrementQTAofIndex(int index)
{
int qty = Convert.ToInt32(gvsale.Rows[index].Cells["QTY"].Value);
qty++;
gvsale.Rows[index].Cells["QTY"].Value = qty;
}
4-最后您只需在添加前检查:如果要添加的代码存在与否:
var newCode = sdr["bnSKU"].ToString();
var indexIfExists = ReturnIndexOfCodeIfAlreadyExists(newCode);
if (indexIfExists == -1)
{
//...Means the code doesn't exists in the DataGridView...
//...So you add a new Row!
}
else
{
//...Means the code exist already and you need to just
//...Increment QTY
IncrementQTAOfIndex(indexIfExists);
}
我希望这就是你所期待的,无论如何,这就是我将如何解决这个问题。
1-获取现有物品
2-检查我想要添加的项目是否存在
3-如果是:获取其索引和增量
4-如果不是:只需将其添加到新行
答案 1 :(得分:0)
感谢您的帮助。我做了我想要的但是有不同的逻辑。
DataRow dr = dt.NewRow();
DataRow[] r;
r = dt.Select("Code = " + sdr["bnSKU"].ToString());
if (r.Length > 0)
{
r[0]["QTY"] = Convert.ToInt32(r[0]["QTY"]) +Convert.ToInt32( txtqnt.Text);
r[0]["Amount"] = Convert.ToInt32( r[0]["QTY"]) * rate;
}
else
{
dr["Code"] = sdr["bnSKU"].ToString();
//dr["Sales Man"] = txtsmCode.Text;
dr["Description"] = cat_brnd.ToString();
dr["Size"] = sdr["nSizeCode"].ToString();
dr["QTY"] = txtqnt.Text;
dr["Price"] = sdr["strSalePrice"].ToString();
dr["Amount"] = amount.ToString();
dt.Rows.Add(dr);
}