I did it something like this, and its working now.
protected void Btnrecv_Click(object sender, EventArgs e)
{
callgrid();
for (int i = 0; i < GridView1.Rows.Count; i++)
{
int PGID = Convert.ToInt32( ds.Tables["T"].Rows[i][1].ToString());
int PID = Convert.ToInt32(ds.Tables["T"].Rows[i][2].ToString());
int qty = Convert.ToInt32(ds.Tables["T"].Rows[i][3].ToString());
int wrid = Convert.ToInt32(ddlwarehouseid.SelectedItem.ToString());
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Clear();
cmd.CommandText = "insert_update";
cmd.Parameters.AddWithValue("@PGID", PGID);
cmd.Parameters.AddWithValue("@PID", PID);
cmd.Parameters.AddWithValue("@IMEINO", "NULL");
cmd.Parameters.AddWithValue("@INVCAT", 1);
cmd.Parameters.AddWithValue("@QTY", qty);
cmd.Parameters.AddWithValue("@CDB", " LOGGEDIN USER");
cmd.Parameters.AddWithValue("@CD", DateTime.Now.ToString());
cmd.Parameters.AddWithValue("@LUB", "LOGGEDIN USER");
cmd.Parameters.AddWithValue("@LUD", DateTime.Now.ToString());
cmd.Parameters.AddWithValue("@VALID", "Y");
cmd.Parameters.AddWithValue("@WRID", wrid);
cmd.Connection = cn;
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
and I used stored Procedure
ALTER procedure [dbo].[insert_update] (@PGID int ,@PID int,@IMEINO VARCHAR(30),@INVCAT INT,@QTY int,@CDB VARCHAR(20) ,@CD DATE,@LUB VARCHAR(20),@LUD DATE,@VALID CHAR(1),@WRID int)
AS
BEGIN
IF NOT EXISTS (SELECT * FROM PROD_INVENTORY WHERE PROD_GRP_ID=@PGID AND PRODUCT_ID=@PID AND WAREHOUSE_ID=@WRID )
INSERT INTO PROD_INVENTORY(PROD_GRP_ID,PRODUCT_ID,IMEI_NO,INV_CAT_ID,QTY,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,VALID,WAREHOUSE_ID)
VALUES (@PGID, @PID,@IMEINO,@INVCAT,@QTY,@CDB,@CD,@LUB,@LUD,@VALID,@WRID)
ELSE
UPDATE PROD_INVENTORY SET
QTY=QTY+@QTY,CREATED_BY=@CDB,CREATION_DATE=@CD,LAST_UPDATED_BY=@LUB,LAST_UPDATE_DATE=@LUD,VALID=@VALID WHERE PROD_GRP_ID=@PGID AND PRODUCT_ID=@PID AND WAREHOUSE_ID=@WRID
END