Каскадный выпадающий список не заполняется - PullRequest
0 голосов
/ 04 июня 2018

Я следовал следующему примеру, чтобы создать несколько каскадных выпадающих меню в веб-приложении.В примере не используется jquery, и я хотел бы придерживаться этого сейчас.https://www.aspsnippets.com/Articles/Populate-Cascading-DropDownList-from-Database-in-ASPNet-Example.aspx

У меня проблемы с получением второго раскрывающегося списка для заполнения списка с использованием результата из первого.Вот мой код:

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        CategorySelect.Items.Clear();
       CategorySelect.Items.Add(new ListItem("--Select Activity--", ""));

        CategorySelect.AppendDataBoundItems = true;
        String strConnString = ConfigurationManager
            .ConnectionStrings["iSAMSConnectionString"].ConnectionString;
        String strQuery = "select TblActivityManagerFolderID, txtName from dbo.TblActivityManagerFolder";
        SqlConnection con = new SqlConnection(strConnString);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = strQuery;
        cmd.Connection = con;
        try
        {
            con.Open();
            CategorySelect.DataSource = cmd.ExecuteReader();
            CategorySelect.DataTextField = "txtName";
            CategorySelect.DataValueField = "TblActivityManagerFolderID";
            CategorySelect.DataBind();
        }
        finally
        {
            con.Close();
            con.Dispose();
        }
    }
}
protected void ActivitySelect_SelectedIndexChanged(object sender, EventArgs e)
{
    ActivitySelect.Items.Clear();
    ActivitySelect.Items.Add(new ListItem("--Select Activity--", ""));

    ActivitySelect.AppendDataBoundItems = true;
    String strConnString = ConfigurationManager
        .ConnectionStrings["iSAMSConnectionString"].ConnectionString;
    String strQuery = "select txtName, TblActivityManagerGroupID from dbo.TblActivityManagerGroup " +
                       "where intFolder=@txtName";
    SqlConnection con = new SqlConnection(strConnString);
    SqlCommand cmd = new SqlCommand();
    cmd.Parameters.AddWithValue("@txtName",
        CategorySelect.SelectedItem.Value);
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = strQuery;
    cmd.Connection = con;
    try
    {
        con.Open();
        ActivitySelect.DataSource = cmd.ExecuteReader();
        ActivitySelect.DataTextField = "txtName";
        ActivitySelect.DataValueField = "TblActivityManagerGroupID";
        ActivitySelect.DataBind();
        if (ActivitySelect.Items.Count > 1)
        {
            ActivitySelect.Enabled = true;
        }
        else
        {
            ActivitySelect.Enabled = false;
        }
    }
    finally
    {
        con.Close();
        con.Dispose();
    }
}

Я использую 2 таблицы.

TblActivityManagerFolder , где я использую 2 поля - TblActivityManagerFolderID и txtName

TblActivityManagerGroup , где я использую 2 поля -intFolder (который присоединяется к TblActivityManagerFolderID) и txtName

Мой первый раскрывающийся список заполняется точно так, как ожидается, но когда я делаю выбор, во втором раскрывающемся списке ничего не происходит.

Дополнительный код:

<asp:SqlDataSource ID="iSAMS" runat="server" ConnectionString="<%$ ConnectionStrings:iSAMSConnectionString %>" 
                SelectCommand="SELECT [blnActive], [TblActivityManagerFolderID], [txtName] FROM [TblActivityManagerFolder] WHERE ([intActivity] = @intActivity)">
            <SelectParameters>
                <asp:Parameter DefaultValue="34" Name="intActivity" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
                </div>

            <div class="auto-style18">

        <asp:DropDownList ID="CategorySelect" runat="server" DataTextField="txtName" DataValueField="TblActivityManagerFolderID" 
            OnSelectedIndexChanged="ActivitySelect_SelectedIndexChanged" CssClass="newStyle1">
        </asp:DropDownList>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="CategorySelect" 
                    ErrorMessage="Please select your answer" style="text-align: left; font-weight: 700; color: #FF0000; font-size: medium;">!</asp:RequiredFieldValidator>
            </div>

           <br />
            <div class="auto-style19">
                <div class="auto-style20">
                Please select the activity undertaken from the pick list:&nbsp; 
                <asp:DropDownList ID="ActivitySelect" runat="server" DataSourceID="iSAMSActivity" DataTextField="txtName" DataValueField="TblActivityManagerGroupId" CssClass="newStyle1" OnSelectedIndexChanged="ActivitySelect_SelectedIndexChanged">
        </asp:DropDownList>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="ActivitySelect" 
                    ErrorMessage="Please select your answer" style="text-align: left; font-weight: 700; color: #FF0000; font-size: medium;">!</asp:RequiredFieldValidator>
                <asp:SqlDataSource ID="iSAMSActivity" runat="server" ConnectionString="<%$ ConnectionStrings:iSAMSConnectionString %>" SelectCommand="SELECT [txtName], [intActivity], [intFolder], [TblActivityManagerGroupId] FROM [TblActivityManagerGroup] WHERE ([intFolder] = @intFolder)">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="CategorySelect" Name="intFolder" PropertyName="SelectedValue" Type="Int32" />
                    </SelectParameters>
            </asp:SqlDataSource>                    

Я также отправляю результаты назад, чтобы я мог видеть, работает ли это, используя:

protected void Button1_Click(object sender, EventArgs e)
    {
        var activity = CategorySelect.DataTextField;
        var CoCActivity = ActivitySelect.DataTextField;
        var OtherSkills = SkillsTextBox.Text;
        var ExtraDev = DevTextBox.Text;
        var OtherActivities = OtherActivitiesTextBox.Text;
        OutputLabel.Text = activity + "<br/>" + CoCActivity + "<br/>" + OtherSkills + "<br/>" + ExtraDev + "<br/>" + OtherActivities;
    }

Когда это отправляет назад, это производитцелое число, а не метка в раскрывающемся списке.Можно ли это изменить, чтобы он отправлял реальный текст?

1 Ответ

0 голосов
/ 04 июня 2018

Установите для свойства AutoPostBack DropdownList значение True.Если вы не установите его, событие будет вызываться только на стороне сервера, когда другие события вызывают обратную передачу (нажатие кнопки или подобное)

...