选择后,将值保留在下拉列表的顶部

时间:2015-07-24 21:07:29

标签: c# .net drop-down-menu listbox

我有一个从我的数据库中获取数据的列表框,它包含各大洲的名称。我有一个下拉列表,根据列表中选择的大陆名称填充国家/地区。我希望下拉列表中包含&​​#34;选择一个国家"作为选择之后的默认第一个值,但它不起作用。

这是我的做法

protected void lbCont_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListItem liSelectCount = new ListItem("Select a country...", "-1");
            ddlCount.Items.Insert(0, liSelectCount);
        }

2 个答案:

答案 0 :(得分:1)

这是一个ASP .NET项目吗?如果是这样,您的代码对我来说是正确的。

问题可能是您的lbCont_SelectedIndexChanged事件未被解雇。您可以通过在该事件方法上设置断点并测试以查看发生的情况来对此进行测试。如果它没有触发,您可以通过将列表框控件上的AutoPostBack属性设置为True来修复它。

这里有一个小工作示例,它可以选择性地将几个不同的数据源绑定到下拉列表,然后复制您在上面使用的代码以插入"选择一个国家...& #34;作为下拉列表中的第一项。

Default.aspx代码:

<body>
    <form id="form1" runat="server">
        <div>
            <h2>Dropdown List Test</h2>
        </div>
        <div>

            Continent Listbox: 
            <p>
                <asp:ListBox ID="lbCont" runat="server" OnSelectedIndexChanged="lbCont_SelectedIndexChanged" AutoPostBack="true">
                    <asp:ListItem Value="1" Selected="True">Continent 1</asp:ListItem>

                    <asp:ListItem Value="2">Continent 2</asp:ListItem>

                    <asp:ListItem Value="3">Continent 3</asp:ListItem>

                </asp:ListBox>
            </p>

            Countries Dropdown: 
            <p>
                <asp:DropDownList ID="ddlCount" runat="server"></asp:DropDownList>
            </p>

        </div>
    </form>
</body>

Default.aspx.cs代码:

protected void lbCont_SelectedIndexChanged(object sender, EventArgs e)
{
    DataTable dt = new DataTable();

    switch (lbCont.SelectedIndex)
    {
        case 0:
            dt.TableName = "CountriesTable1";
            dt.Columns.Add("CountryID");
            dt.Columns.Add("CountryName");
            dt.Rows.Add(1, "Country 1a");
            dt.Rows.Add(2, "Country 1b");
            dt.Rows.Add(3, "Country 1c");
            break;

        case 1:
            dt.TableName = "CountriesTable2";
            dt.Columns.Add("CountryID");
            dt.Columns.Add("CountryName");
            dt.Rows.Add(1, "Country 2a");
            dt.Rows.Add(2, "Country 2b");
            dt.Rows.Add(3, "Country 2c");
            break;

        case 2:
            dt.TableName = "CountriesTable3";
            dt.Columns.Add("CountryID");
            dt.Columns.Add("CountryName");
            dt.Rows.Add(1, "Country 3a");
            dt.Rows.Add(2, "Country 3b");
            dt.Rows.Add(3, "Country 3c");
            break;

        default:
            break;
    }

    ddlCount.DataSource = dt;
    ddlCount.DataTextField = "CountryName";
    ddlCount.DataValueField = "CountryID";
    ddlCount.DataBind();

    // Same as yours
    ListItem liSelectCount = new ListItem("Select a country...", "-1");
    ddlCount.Items.Insert(0, liSelectCount);
}

因此,使用此代码,您可以添加&#34;选择国家&#34;效果很好。您只需要确保列表框控件上的AutoPostBack设置为True,否则lbCont_SelectedIndexChanged事件不会被触发。

答案 1 :(得分:0)

我认为您需要在插入DDL后调用DataBind()方法... 我担心,如果他们多次改变大陆,你有可能反复插入该选项。你应该在插入之前检查一下它是否存在。