Generally if any file need to download the following code can do that
string file_path=Server.MapPath("~/files/"+file_name);
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + file_Name + "\"");
HttpContext.Current.Response.TransmitFile(file_path);
HttpContext.Current.Response.End();
For crystal report I guess you need to take help of Crystal Report viewer control to create crystal report file.