【发布时间】:2020-09-24 09:55:01
【问题描述】:
如果数据表为空但标签未打印文本,我想显示消息。
我试过ScriptManager.RegisterStartupScript(this, GetType(), "message", "alert('No data found');", true); 但它仍然没有打印任何消息。
我相信我正在从 ZIP 文件夹中的服务器下载文件,这可能是我无法打印消息的原因?
请指导我哪里做错了?
@Adyson 请检查我更新的代码 业务逻辑解释:
这里我们的要求是:单击一次按钮存储多个文件,这是不可能的因为对于一个 HTTP 请求,我们可以生成一个响应,所以我做的是:首先我创建 csv 文件并稍后存储在服务器上完成 csv 文件生成我将所有 csv 压缩到一个文件中并能够下载。并在页面加载时删除旧的 csv 文件以避免重复文件。
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string[] files = Directory.GetFiles(Server.MapPath("~/Order_Files/"));
int iCnt = 0;
foreach (string file in files)
{
FileInfo info = new FileInfo(file);
info.Refresh();
if (info.LastWriteTime <= DateTime.Now)
{
info.Delete();
iCnt += 1;
}
}
btnGenerate.Attributes.Add("onclick", "waitdownload();");
if (!Page.IsPostBack)
{
BindRegion();
//lblINQ.Text = "";
//lblQUO.Text = "";
}
}
public void BindRegion()
{
//Binding Code
}
protected void ddlregion_SelectedIndexChanged(object sender, EventArgs e)
{
//Select Index change code
}
protected void btnGenerate_Click(object sender, EventArgs e)
{
#region CSV Generation
DateTime Order_Date = Convert.ToDateTime(deOrderDate.Text);
var Order_Date_Datemodified = Order_Date.ToString("yyyyMMdd");
foreach (ListItem listItem in ddlDepot.Items)
{
int OrderSum = 0;
int LineSum = 0;
if (listItem.Selected)
{
#region for INQ
if (ddlInqfileType.SelectedItem.Text == "INQ" || ddlInqfileType.SelectedItem.Text == "QUO")
{
OracleCommand CmdB = new OracleCommand(String.Format(@"//Select Query"
, ddlInqfileType.SelectedItem.Text, listItem.Value,
(ddlInqfileType.SelectedItem.Text.Equals("ÏNQ") ? deInqDate.Text.ToString() : deQuoDate.Text.ToString()),
deOrderDate.Text.ToString()), con);
CmdB.CommandType = CommandType.Text;
OracleDataAdapter daBINQ = new OracleDataAdapter();
DataTable dtINQ = new DataTable();
dtINQ.Columns.Add("DEPOT_CODE", typeof(string));
dtINQ.Columns.Add("ROUTE_CODE", typeof(string));
dtINQ.Columns.Add("UPLOAD_DATE", typeof(string));
dtINQ.Columns.Add("SAP_REGION_CODE", typeof(string));
dtINQ.Columns.Add("SAP_SUB_REGION_CODE", typeof(string));
dtINQ.Columns.Add("SAP_CUSTOMER_CODE", typeof(string));
dtINQ.Columns.Add("SALES_DATE", typeof(string));
dtINQ.Columns.Add("PRODUCT_CODE", typeof(string));
dtINQ.Columns.Add("ORDER_QTY", typeof(string));
dtINQ.Columns.Add("UOM_CODE", typeof(string));
dtINQ.Columns.Add("LINE_TOTAL", typeof(string));
daBINQ.SelectCommand = CmdB;
daBINQ.Fill(dtINQ);
if (dtINQ.Rows.Count <= 0)
{
lblINQ.Text = "No data found for Selected Inquiry date, Please select other date";
lblINQ.ForeColor = System.Drawing.Color.Red;
}
else
{
foreach (DataRow dr in dtINQ.Rows)
{
OrderSum += Convert.ToInt32(dr["ORDER_QTY"]);
}
foreach (DataRow dr in dtINQ.Rows)
{
LineSum += Convert.ToInt32(dr["LINE_TOTAL"]);
}
DataRow row = dtINQ.NewRow();
row["DEPOT_CODE"] = "TOT";
row["ORDER_QTY"] = OrderSum;
row["LINE_TOTAL"] = LineSum;
dtINQ.Rows.Add(row);
string fileName = "INQ" + listItem.Value + Order_Date_Datemodified + ".CSV";
string filePath = HttpContext.Current.Server.MapPath("~/Order_Files/" + fileName);
Almarai.AlmTextReadWrite.GenerateCSV(filePath.Replace(fileName, ""), fileName, dtINQ, false, false);
}
}
#endregion FOR INQ
#region For QUO
if (ddlqoutatfileType.SelectedItem.Text == "INQ" || ddlqoutatfileType.SelectedItem.Text == "QUO")
{
OracleCommand CmdB = new OracleCommand(String.Format(@"//Select Query"
, ddlqoutatfileType.SelectedItem.Text, listItem.Value,
(ddlqoutatfileType.SelectedItem.Text.Equals("QUO") ? deInqDate.Text.ToString() : deQuoDate.Text.ToString()),
deOrderDate.Text.ToString()), con);
CmdB.CommandType = CommandType.Text;
OracleDataAdapter daQUO = new OracleDataAdapter();
DataTable dtQUO = new DataTable();
dtQUO.Columns.Add("DEPOT_CODE", typeof(string));
dtQUO.Columns.Add("ROUTE_CODE", typeof(string));
dtQUO.Columns.Add("UPLOAD_DATE", typeof(string));
dtQUO.Columns.Add("SAP_REGION_CODE", typeof(string));
dtQUO.Columns.Add("SAP_SUB_REGION_CODE", typeof(string));
dtQUO.Columns.Add("SAP_CUSTOMER_CODE", typeof(string));
dtQUO.Columns.Add("SALES_DATE", typeof(string));
dtQUO.Columns.Add("PRODUCT_CODE", typeof(string));
dtQUO.Columns.Add("ORDER_QTY", typeof(string));
dtQUO.Columns.Add("UOM_CODE", typeof(string));
dtQUO.Columns.Add("LINE_TOTAL", typeof(string));
daQUO.SelectCommand = CmdB;
daQUO.Fill(dtQUO);
if (dtQUO.Rows.Count <= 0)
{
lblQUO.Visible = true;
}
else
{
foreach (DataRow dr in dtQUO.Rows)
{
OrderSum += Convert.ToInt32(dr["ORDER_QTY"]);
}
foreach (DataRow dr in dtQUO.Rows)
{
LineSum += Convert.ToInt32(dr["LINE_TOTAL"]);
}
DataRow row = dtQUO.NewRow();
row["DEPOT_CODE"] = "TOT";
row["ORDER_QTY"] = OrderSum;
row["LINE_TOTAL"] = LineSum;
dtQUO.Rows.Add(row);
string fileName = "QUO" + listItem.Value + Order_Date_Datemodified + ".CSV";
string filePath = HttpContext.Current.Server.MapPath("~/Order_Files/" + fileName);
Almarai.AlmTextReadWrite.GenerateCSV(filePath.Replace(fileName, ""), fileName, dtQUO, false, false);
}
}
#endregion For QUO
}
}
#endregion CSV Generation
#region ZIP Generation
using (ZipFile zip = new ZipFile())
{
//string fileName = ddlqoutatfileType.SelectedItem.Text + ".csv";
string filePath = HttpContext.Current.Server.MapPath("~/Order_Files/");
zip.AlternateEncodingUsage = ZipOption.AsNecessary;
zip.AddDirectoryByName("Orders");
string directoryName = Path.GetDirectoryName(filePath);
foreach (String filename in Directory.GetFiles(directoryName, "*.csv"))
{
zip.AddFile(filename, "Orders");
}
// cookies
HttpCookie cookie = new HttpCookie("ExcelDownloadFlag");
cookie.Value = "Flag";
cookie.Expires = DateTime.Now.AddDays(1);
Response.AppendCookie(cookie);
//cookies
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.BufferOutput = false;
string zipName = String.Format("Zip_{0}.zip", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + zipName);
zip.Save(HttpContext.Current.Response.OutputStream);
HttpContext.Current.Response.End();
}
#endregion ZIP Generation
}
ASPX:
<asp:Label ID="lblQUO" runat="server"></asp:Label>
【问题讨论】:
-
这是一个可能的解释。如果请求返回要下载的文件,它也不能在同一响应中返回网页的内容。浏览器会将其视为要下载的文件或要显示的内容,而不是两者(它使用标题来决定)。 HTTP 响应只能有一种内容类型。
-
@ADyson 哦,还有其他方法可以达到同样的效果吗?
-
这取决于精确的要求。如果没有数据,听起来您可能想返回错误消息?如果是这样,那么您应该安排代码,使其在这种情况下不会启动文件下载。
-
@ADyson 不,我不想返回错误消息,我只想显示此消息,让用户知道特定日期没有数据
-
您是否将调试器置于条件中并检查哪些行正在执行?