如何在同一记录上增加gridview单元格值

时间:2014-03-08 07:56:32

标签: c# asp.net gridview datagridview increment

我有7列(代码,销售人员,描述,大小,数量,价格,金额)。 如果记录相同,我如何在QTY列中增加。如果数量为1之前,这应为2。

enter image description here

这是代码

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

2 个答案:

答案 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);
                    }