我有一张桌子:
并乘以最终结果如下:
一个过程被定义为以下乘法:(必须将下拉列表的值乘以数据库中的值,然后将它们水平相加并在最终结果中显示为resault。
CREATE PROCEDURE [dbo].[Cstored]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Ta int
DECLARE @Em int
DECLARE @Ma int
DECLARE @Sa int
SET @Em = 8 >>>> need to be set by user selection in dropdows list
SET @Ta= 6 >>>> need to be set by user selection in dropdows list
SET @Sa= 5 >>>> need to be set by user selection in dropdows list
SET @Ma = 7 >>>> need to be set by user selection in dropdows list
SELECT
Namec,
Tar*@Ta AS val1,
Emk*@Em as val2,
Mas*@Ma as val3,
San*@Sa As val4,
(Tar*@Ta)+(Emk*@Em)+(Mas*@Ma)+(San*@Sa) as finalresult
FROM Cdetail
END
正如你在屏幕截图中看到的那样,它在数据库中运行良好,但是手动设置了值。我想通过用户选择来设置它。
SET @Em = 8
它适用于数据库,但我在asp网页中创建了一些下拉列表,以便按用户选择值:
<form id="form1" runat="server">
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" >
<asp:ListItem Value="@Em">Emk</asp:ListItem>
<asp:ListItem Value="@Ta">Tar</asp:ListItem>
<asp:ListItem Value="@Sa">San</asp:ListItem>
<asp:ListItem Value="@Ma">Mas</asp:ListItem>
</asp:DropDownList>
<br />
<asp:DropDownList ID="DropDownList2" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Value="@Em">Emk</asp:ListItem>
<asp:ListItem Value="@Ta">Tar</asp:ListItem>
<asp:ListItem Value="@Sa">San</asp:ListItem>
<asp:ListItem Value="@Ma">Mas</asp:ListItem>
</asp:DropDownList>
<br />
<asp:DropDownList ID="DropDownList3" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Value="@Em">Emk</asp:ListItem>
<asp:ListItem Value="@Ta">Tar</asp:ListItem>
<asp:ListItem Value="@Sa">San</asp:ListItem>
<asp:ListItem Value="@Ma">Mas</asp:ListItem>
</asp:DropDownList>
<br />
<asp:DropDownList ID="DropDownList4" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem Value="@Em">Emk</asp:ListItem>
<asp:ListItem Value="@Ta">Tar</asp:ListItem>
<asp:ListItem Value="@Sa">San</asp:ListItem>
<asp:ListItem Value="@Ma">Mas</asp:ListItem>
</asp:DropDownList>
每个下拉列表都需要具有默认值,如下所示:
DropDownList1.SelectedValue = 8;
DropDownList2.SelectedValue = 7;
DropDownList3.SelectedValue = 6;
DropDownList4.SelectedValue = 5;
这意味着在下拉列表1中选择的值必须发送到带有数字8的存储过程(DD2数字7,依此类推),然后设置变量,然后乘以相关的数据库中的值。
然后在finalresult
中从上到下显示gridview
的值。
我尝试使用以下代码,但它不起作用,我不知道如何将下拉值发送到商店程序并根据选择提供每个项目。
protected void Button1_Click(object sender, EventArgs e)
{
DropDownList1.SelectedValue = 8;
DropDownList2.SelectedValue = 7;
DropDownList3.SelectedValue = 6;
DropDownList4.SelectedValue = 5;
SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["carConnectionString"]);
sqlCon.Open();
SqlCommand scCommand = new SqlCommand("Carstored", sqlCon);
scCommand.CommandType = CommandType.StoredProcedure;
scCommand.Parameters.AddWithValue("????", DropDownList1);
scCommand.Parameters.AddWithValue("????", DropDownList2);
scCommand.Parameters.AddWithValue("????", DropDownList3);
scCommand.Parameters.AddWithValue("????", DropDownList4);
using (SqlDataAdapter sda = new SqlDataAdapter(scCommand))
{
DataTable dt = new DataTable();
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
我想,如果用户在下拉菜单1中选择Emk
,则8
数字乘以(X)到表格中所有Emk
的值,如果用户选择Tar
in dropdow 2,7
数字乘以(X)到表格中所有Tar
的值。
答案 0 :(得分:0)
声明参数:
,而不是在存储过程中声明变量CREATE PROCEDURE [dbo].[Cstored]
(
@Ta int,
@Em int,
@Ma int,
@Sa int
)
AS
BEGIN
SET NOCOUNT ON;
SELECT
Namec,
Tar*@Ta AS val1,
Emk*@Em as val2,
Mas*@Ma as val3,
San*@Sa As val4,
(Tar*@Ta)+(Emk*@Em)+(Mas*@Ma)+(San*@Sa) as finalresult
FROM Cdetail
END
然后,在您的c#代码中,执行以下操作:
DataTable dt;
using(var sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["carConnectionString"]))
{
sqlCon.Open();
using(var scCommand = new SqlCommand("Carstored", sqlCon))
{
scCommand.CommandType = CommandType.StoredProcedure;
scCommand.Parameters.Add("@Ta", SqlDbType.Int).Value = DropDownList1.SelectedValue;
scCommand.Parameters.Add("@Em", SqlDbType.Int).Value = DropDownList2.SelectedValue;
scCommand.Parameters.Add("@Ma", SqlDbType.Int).Value = DropDownList3.SelectedValue;
scCommand.Parameters.Add("@Sa", SqlDbType.Int).Value = DropDownList4.SelectedValue;
using (SqlDataAdapter sda = new SqlDataAdapter(scCommand))
{
dt = new DataTable();
sda.Fill(dt);
}
}
}