如何根据之前在 asp.net c# 中更改的下拉数据更改下拉列表?

How change the dropdown according to the previous dropdown data changed in asp.net c#?

我分别有 5 个下拉候选人姓名、供应商姓名、客户姓名、职位。我想如果候选人姓名随候选人姓名而变化,则所有其他列都应相应更改。 注意:所有下拉列表均直接取自数据库列。

这里我调用了aspx页面中的所有列:

<asp:DropDownList CssClass="form-control select2" 
    data-placeholder="Choose Consultant..." TabIndex="-1" 
    aria-hidden="true" ID="dd_consultantName" runat="server" 
    DataSourceID="SqlDataSource1" DataTextField="candidatename" 
    DataValueField="candidatename" 
    OnTextChanged="dd_consultantName_TextChanged" AutoPostBack="true">
    <asp:ListItem class="text-muted">
        --Choose Candidate Name--        
    </asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:connectiontest %>" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT [candidatename] FROM [tb_test] WHERE ([mail] = @mail )">
    <SelectParameters>
        <asp:SessionParameter DefaultValue="mail" Name="mail" SessionField="mail" />
    </SelectParameters>
</asp:SqlDataSource>

在这里我得到了所有的候选名称,我正在调用所有的文件,比如供应商名称客户名称 etc.in 我已经使用了 ontextchange 事件,它正在刷新页面,但是通过错误就像“System.IndexOutOfRangeException:供应商名称”。

这是我分享的代码:

public void getcandidatename()
{
    SqlConnection con = new SqlConnection(connection);
    con.Open();
    SqlCommand cmd = new SqlCommand("sp_testing", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@type", "selectcandidatename");
    cmd.Parameters.AddWithValue("@mail", Session["mail"]);
    cmd.Parameters.AddWithValue("@candidatename", dd_consultantName.SelectedItem.Text);
    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows)
    {
        while (dr.Read())
        {
            dd_vendorname.SelectedItem.Text = dr["vendorname"].ToString();
            dd_clientname.SelectedItem.Text = dr["clientname"].ToString();
            dd_companyname.SelectedItem.Text = dr["companyname"].ToString();
            dd_jobtitle.SelectedItem.Text = dr["jobtitle"].ToString();
        }
    }
    dr.Close(); con.Close();
    SqlConnection.ClearAllPools();
}

在这里我应该得到相应候选人姓名的数据,但问题是我无法得到数据请帮助我。 我想在 asp.net c# 中使用它,如果有人可以提供帮助,我将非常感谢 him/her 谢谢

请无视我的英语不好

这是来自我的数据库的查询 select candidatename from tb_testcandidates where mail=@mail and candidate is not null

我能理解的是,如果您想更改一个或多个下拉列表,无需 C# 代码即可完成,只需使用 SqlDataSource 并指定查询或存储过程以及参数和下拉列表的关联,我会举一个例子来练习你的问题:

ASPX代码:

<asp:DropDownList ID="DropDownListConsultant" runat="server" AutoPostBack="true" 
    CssClass="form-control select2" data-placeholder="Choose Consultant..." TabIndex="-1" aria-hidden="true" 
    DataSourceID="SqlDataSource1" DataTextField="candidatename" DataValueField="candidate_id">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:TestConnectionString %>"
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT [candidate_id], [candidatename] FROM [tb_test] WHERE [mail] = @mail;">
    <SelectParameters>
        <asp:SessionParameter DefaultValue="mail" Name="mail" SessionField="mail" />
    </SelectParameters>
</asp:SqlDataSource>

<asp:DropDownList ID="DropDownListVendor" runat="server" AutoPostBack="true" CssClass="form-control select2" 
    aria-hidden="true" data-placeholder="Choose Consultant..." TabIndex="-1"
    DataSourceID="SqlDataSource2" DataTextField="vendorname" DataValueField="vendor_id">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:TestConnectionString %>"
    ProviderName="System.Data.SqlClient" 
    SelectCommand="EXEC sp_testing @type, @mail, @candidatename;">
    <SelectParameters>
        <asp:ControlParameter ControlID="DropDownListConsultantName" Name="candidatename" DefaultValue="" PropertyName="SelectedItem" />  
        <asp:SessionParameter DefaultValue="mail" Name="mail" SessionField="mail" />          
        <asp:Parameter DefaultValue="selectcandidatename" Name="type" />
    </SelectParameters>
</asp:SqlDataSource>

<asp:DropDownList ID="DropDownListClient" runat="server" AutoPostBack="true" CssClass="form-control select2" 
    aria-hidden="true" data-placeholder="Choose Consultant..." TabIndex="-1"
    DataSourceID="SqlDataSource3" DataTextField="clientname" DataValueField="client_id">
</asp:DropDownList>
    <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
        ConnectionString="<%$ ConnectionStrings:TestConnectionString %>"
        ProviderName="System.Data.SqlClient" 
        SelectCommand="EXEC sp_testing @type, @mail, @candidatename;"> // Other procedure? or include all columns in the same procedure
    <SelectParameters>
            <asp:ControlParameter ControlID="DropDownListConsultantName" Name="candidatename" DefaultValue="" PropertyName="SelectedItem" />  
            <asp:SessionParameter DefaultValue="mail" Name="mail" SessionField="mail" />          
            <asp:Parameter DefaultValue="selectcandidatename" Name="type" />
    </SelectParameters>
</asp:SqlDataSource>

如您所见,DropDownListVendorDropDownListClient 元素使用相同的存储过程来捕获信息,具体取决于在 DropDownListConsultant 元素中选择的内容,并使用不同的列来自查询(而不是对 DropdownList 使用不同的存储过程)。这就是我在您的代码示例中看到的内容。

如果有效,请告诉我,希望对您有所帮助!