【问题标题】:Another Populate Dropdownlist from another Dropdownlist selected value using stored procedure使用存储过程从另一个 Dropdownlist 选定值中填充另一个下拉列表
【发布时间】:2016-06-03 11:25:39
【问题描述】:

我在网上找到了几个类似主题的解决方案,但我没有找到任何明确的解决方案和我正在处理的案例的解释。以下是我需要帮助的问题/领域:

  1. 如何使用基于第一个下拉列表 (CompanyDDL) 中所选公司的联系信息 (Email) 填充第二个下拉列表 (EmailDDL)。我想在这里指出两点: 一个。我只有一个表而不是两个表,并且我没有其他解决方案中提到的关联 ID。 (见下文) 湾。我在后面的代码中使用存储过程(见下文)

  2. 我不太清楚 OnSelectedIndexChanged="ContactEmailList_SelectedIndexChanged" 和我的 sproc2 存储过程如何使用 @Company 值过滤电子邮件列表之间的区别。有人会分享知识吗?换句话说,第一个下拉列表中的选定值如何传递给存储过程sproc2?

  3. 我没有问题只使用下拉列表 asp 控件填充第一个下拉列表,而不必使用 Dataset 或 SqlDataAdapter 。我需要将它们用于第二个下拉列表吗?

  4. 到目前为止,我得到了第一个下拉列表(公司列表)和第二个下拉列表(ContactEmail)中所有电子邮件的长列表。我需要让第二个列表被第一个列表过滤。请帮忙。如果有可能一步一步的方法与图解的代码示例将非常有帮助和赞赏。

    谢谢

背景信息:

2 个存储过程:sproc1 和 sproc2 以及 1 个具有 3 列的 SQL 表 (ContactInfo):

公司、联系人姓名、联系人电子邮件。

sproc1: procedure [dbo].[sproc1]
    as
    begin
    Select distinct [Company] From [ContactInfo]
    end
sproc2:  procedure [dbo].[sproc2] @Company nvarchar(50) = null
    as
    begin
    Select distinct [ContactName],[ContactEmail] From [ContactInfo]
           where [Company] = @Company
    end

aspx:
//First Dropdownlist:

<p>Company:<br /> 
<asp:DropDownList ID="Company_DDList" runat="server"  
              Width="355px" Height="24px" 
              DataSourceID="ContactInfo"  
              DataTextField="Company"  
              DataValueField="Company" 
              AutoPostBack="true"  
              AppendDataBoundItems="true"
              onselectedindexchanged = 
              "Company_DDList_SelectedIndexChanged">                        
              <asp:ListItem Enabled="true" 
                   Selected="True" 
                   Text="-- select --">
              </asp:ListItem>   
</asp:DropDownList>     
<asp:SqlDataSource ID="ContactInfo" runat="server"  
 ConnectionString="<%$ ConnectionStrings:My_ConnectionString %>"  
 SelectCommand="sproc1"  
 SelectCommandType="StoredProcedure"> 
</asp:SqlDataSource>

//Second Dropdownlist:

<p>Contact:<br /> 
<asp:DropDownList ID="Contact_DDList" runat="server"  
              Width="355px" Height="24px" 
              DataSourceID="ContactInfo"  
              DataTextField="Email"  
              DataValueField="Email" 
              AutoPostBack="true"  
              AppendDataBoundItems="true"
              onselectedindexchanged="Contact_DDList_SelectedIndexChanged">                  
              <asp:ListItem Enabled="true" 
                   Selected="True" 
                   Text="-- select --">
              </asp:ListItem>   
</asp:DropDownList>     
<asp:SqlDataSource ID="ContactInfo" runat="server"  
 ConnectionString="<%$ ConnectionStrings:My_ConnectionString %>"  
 SelectCommand="sproc2"  
 SelectCommandType="StoredProcedure"> 
</asp:SqlDataSource>

aspx.c  //////////////////////////////

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Net.Mail; 
using System.Net; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
public string query; 
SqlConnection con = new
SqlConnection(ConfigurationManager.ConnectionStrings
["MyConnectionString"].ConnectionString); 

protected void Page_Load(object sender, EventArgs e) 
{
 if (!IsPostBack) 
    { 
    con.Open(); 
    //SubmitButton.Enabled = false; 
    //Label1.Visible = false;
    }
protected void Company_DDList_SelectedIndexChanged(object sender, EventArgs            
e)
{
    query = "sproc2"; 
    SqlCommand cmd = new SqlCommand(query, con); 
    cmd.CommandType = CommandType.StoredProcedure;
    ?????
} 
protected void Contact_DDList_SelectedIndexChanged(object sender, EventArgs 
e)               
{          
//
{ 

【问题讨论】:

    标签: c# asp.net stored-procedures drop-down-menu


    【解决方案1】:

    您可以在完成第一个下拉菜单后调用第二个下拉更改事件

     protected void Company_DDList_SelectedIndexChanged(object sender,            EventArgs            
    e)
     {
    query = "sproc2"; 
    SqlCommand cmd = new SqlCommand(query, con); 
    cmd.CommandType = CommandType.StoredProcedure;
    
    Contact_DDList_SelectedIndexChanged(sender, e);
    } 
    

    以下代码在第一个下拉菜单更改后调用第二个下拉更改事件。试试看。

    【讨论】:

    • 这是我不确定第二个下拉菜单该怎么做的地方。由于我能够在我的 aspx 中获得如上所述的第一个下拉列表,因此我不必在 aspx.cs 中执行任何操作。所以 Contact_DDList_SelectedIndexeChanged 不需要什么? onselectedindexedchanged 是否会处理第一个下拉列表中传递的选定项目?如果没有,我是否需要通过公司代替“发件人”?谢谢
    • 我试过你告诉我的,但我没有比以前更进一步了。我确实尝试过 ContactEmail_DDList.DataTextfield = "Email"; ContactEmail_DDListDataValueField = "电子邮件" ContactEmail_DDList.DataBind();你能和我分享一下步骤(例子)吗?谢谢
    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多