按钮 OnClick 事件在 ASP.NET Web 表单应用程序中不起作用
Button OnClick event not working in ASP.NET Web Form Application
我按照 this tutorial 创建了以下 ASP.NET Web 表单以将参数发送到存储过程并使用 Microsoft Report 显示结果。
这是Incomplete_Prodcut.aspx文件
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Incomplete_Prodcut.aspx.cs" Inherits="albaraka.Report.Incomplete_Prodcut" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="width: 1116px">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<br />
Type:
<asp:TextBox ID="type" runat="server" Width="64px"></asp:TextBox>
Category:
<asp:TextBox ID="category" runat="server" Width="78px"></asp:TextBox>
Country:
<asp:TextBox ID="country" runat="server" Width="85px"></asp:TextBox>
Subsidary:
<asp:TextBox ID="subsidary" runat="server" Width="72px"></asp:TextBox>
Date:
<asp:TextBox ID="date" runat="server" Width="100px"></asp:TextBox>
<asp:Button ID="btnShow" runat="server" Text="Button" Width="56px" />
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Height="397px" Width="951px" style="margin-top: 17px; margin-right: 0px;"></rsweb:ReportViewer>
</div>
</form>
</body>
</html>
这是Incomplete_Prodcut.aspx.cs文件
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnShow_Click(object Sender, EventArgs e)
{
ShowReport();
}
private void ShowReport()
{
//Reset
ReportViewer1.Reset();
//DataSource
ALBARAKA_Incomplete_Product_DataSet dt = GetData(type.Text, category.Text,subsidary.Text,country.Text, DateTime.Parse(date.Text));
ReportDataSource rds = new ReportDataSource("Incomplete_Product_DataSet", dt);
ReportViewer1.LocalReport.DataSources.Add(rds);
//Path
ReportViewer1.LocalReport.ReportPath = "~/Report/Incomplete_Product.rdlc";
//Paramaeters
ReportParameter[] rptParams = new ReportParameter[] {
new ReportParameter("type",type.Text),
new ReportParameter("category", category.Text),
new ReportParameter("country",country.Text),
new ReportParameter("subsidary",subsidary.Text),
new ReportParameter("date",date.Text),
};
ReportViewer1.LocalReport.SetParameters(rptParams);
//Refersh
ReportViewer1.LocalReport.Refresh();
}
private ALBARAKA_Incomplete_Product_DataSet GetData(string type, string category, string country, string subsidary, DateTime? date)
{
ALBARAKA_Incomplete_Product_DataSet dt = new ALBARAKA_Incomplete_Product_DataSet();
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["AB_ReportEntities"].ConnectionString;
using (SqlConnection cn = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand("FindIncomplete_Products", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@type", SqlDbType.NVarChar).Value = type;
cmd.Parameters.Add("@category", SqlDbType.NVarChar).Value = category;
cmd.Parameters.Add("@country", SqlDbType.NVarChar).Value = country;
cmd.Parameters.Add("@subsidary", SqlDbType.NVarChar).Value = subsidary;
cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = date;
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
}
return dt;
}
我在上面表格的 OnClick 事件中插入了调试点,但是一旦 运行 这个应用程序处于调试模式并单击 "btnShow" 按钮,这个应用程序就不会指向这个调试点。我的方法有什么问题吗?
您还没有将事件处理程序附加到按钮,添加一个:-
<asp:Button ID="btnShow" runat="server" Text="Button" Width="56px"
OnClick="btnShow_Click" />
或者,您也可以像这样以编程方式附加事件:-
protected void Page_Load(object sender, EventArgs e)
{
btnShow.Click += btnShow_Click;
}
我按照 this tutorial 创建了以下 ASP.NET Web 表单以将参数发送到存储过程并使用 Microsoft Report 显示结果。
这是Incomplete_Prodcut.aspx文件
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Incomplete_Prodcut.aspx.cs" Inherits="albaraka.Report.Incomplete_Prodcut" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div style="width: 1116px">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<br />
Type:
<asp:TextBox ID="type" runat="server" Width="64px"></asp:TextBox>
Category:
<asp:TextBox ID="category" runat="server" Width="78px"></asp:TextBox>
Country:
<asp:TextBox ID="country" runat="server" Width="85px"></asp:TextBox>
Subsidary:
<asp:TextBox ID="subsidary" runat="server" Width="72px"></asp:TextBox>
Date:
<asp:TextBox ID="date" runat="server" Width="100px"></asp:TextBox>
<asp:Button ID="btnShow" runat="server" Text="Button" Width="56px" />
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Height="397px" Width="951px" style="margin-top: 17px; margin-right: 0px;"></rsweb:ReportViewer>
</div>
</form>
</body>
</html>
这是Incomplete_Prodcut.aspx.cs文件
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnShow_Click(object Sender, EventArgs e)
{
ShowReport();
}
private void ShowReport()
{
//Reset
ReportViewer1.Reset();
//DataSource
ALBARAKA_Incomplete_Product_DataSet dt = GetData(type.Text, category.Text,subsidary.Text,country.Text, DateTime.Parse(date.Text));
ReportDataSource rds = new ReportDataSource("Incomplete_Product_DataSet", dt);
ReportViewer1.LocalReport.DataSources.Add(rds);
//Path
ReportViewer1.LocalReport.ReportPath = "~/Report/Incomplete_Product.rdlc";
//Paramaeters
ReportParameter[] rptParams = new ReportParameter[] {
new ReportParameter("type",type.Text),
new ReportParameter("category", category.Text),
new ReportParameter("country",country.Text),
new ReportParameter("subsidary",subsidary.Text),
new ReportParameter("date",date.Text),
};
ReportViewer1.LocalReport.SetParameters(rptParams);
//Refersh
ReportViewer1.LocalReport.Refresh();
}
private ALBARAKA_Incomplete_Product_DataSet GetData(string type, string category, string country, string subsidary, DateTime? date)
{
ALBARAKA_Incomplete_Product_DataSet dt = new ALBARAKA_Incomplete_Product_DataSet();
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["AB_ReportEntities"].ConnectionString;
using (SqlConnection cn = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand("FindIncomplete_Products", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@type", SqlDbType.NVarChar).Value = type;
cmd.Parameters.Add("@category", SqlDbType.NVarChar).Value = category;
cmd.Parameters.Add("@country", SqlDbType.NVarChar).Value = country;
cmd.Parameters.Add("@subsidary", SqlDbType.NVarChar).Value = subsidary;
cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = date;
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
}
return dt;
}
我在上面表格的 OnClick 事件中插入了调试点,但是一旦 运行 这个应用程序处于调试模式并单击 "btnShow" 按钮,这个应用程序就不会指向这个调试点。我的方法有什么问题吗?
您还没有将事件处理程序附加到按钮,添加一个:-
<asp:Button ID="btnShow" runat="server" Text="Button" Width="56px"
OnClick="btnShow_Click" />
或者,您也可以像这样以编程方式附加事件:-
protected void Page_Load(object sender, EventArgs e)
{
btnShow.Click += btnShow_Click;
}