簡體   English   中英

asp.net級聯下拉列表始終選擇第一項

[英]asp.net cascading dropdownlists always selects first item

我在頁面中使用三個DropDownLists。 我也使用if(!Page.IsPostBack)條件在頁面加載時將數據綁定到DDL1(DropDownList1)。 在DDL1 selectedIndexChanged事件上,我將數據綁定到DDL2及其工作正常。 但是,當我嘗試對DDL3和DDL2執行相同操作時(就像在DDL2的SelectedIndexChanged事件上將數據綁定到DDL2一樣),只有當我選擇隨機選項時,DDL2才會選擇第一項,而且DDL2仍然是第一項。 在此,所有3個DDL均為AutoPostback-true,已啟用Vistate

這是我的代碼:

ASPX-代碼

<form id="form1" runat="server">
<div>    
    <br />
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
        <asp:ListItem Value="0">Select</asp:ListItem>
    </asp:DropDownList>
    <br />
    <br />
    <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
        <asp:ListItem Value="0">Select</asp:ListItem>
    </asp:DropDownList>
    <br />
    <br />
    <asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="True">
        <asp:ListItem Value="0">Select</asp:ListItem>
    </asp:DropDownList>
    <br />    
</div>
</form>

.CS代碼...

public partial class getcolumns : System.Web.UI.Page
{
private SqlConnection con;
private SqlDataAdapter da;
private DataTable dt;
private DataSet ds;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        try
        {
            string query = " SELECT name, dbid FROM sys.sysdatabases where dbid > 4 order by name ";
            con = new SqlConnection(ConfigurationManager.AppSettings["godb"].ToString());
            da = new SqlDataAdapter(query, con);
            dt = new DataTable();
            ds = new DataSet();
            da.Fill(dt);
            DropDownList1.DataSource = dt.DefaultView.ToTable(true, "name", "dbid");
            //DropDownList1.DataValueField = "dbid";
            DropDownList1.DataTextField = "name";
            DropDownList1.DataBind();
        }
        catch (Exception) { }
    }
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    try
    {
        DropDownList2.Items.Clear();
        string query = " SELECT TABLE_CATALOG, TABLE_NAME FROM " + DropDownList1.SelectedItem + ".INFORMATION_SCHEMA.tables ";
        con = new SqlConnection(ConfigurationManager.AppSettings["godb"].ToString());
        da = new SqlDataAdapter(query, con);
        dt = new DataTable();
        ds = new DataSet();
        da.Fill(ds);
        DropDownList2.DataSource = ds; // dt.DefaultView.ToTable(true, "TABLE_NAME", "TABLE_CATALOG");
        //DropDownList2.DataValueField = "TABLE_CATALOG";
        DropDownList2.DataTextField = "TABLE_NAME";
        DropDownList2.DataBind();
        DropDownList2.Items.Insert(0, new ListItem("--Select--", "0"));
    }
    catch { }
}

protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
    try
    {
        DropDownList3.Items.Clear();
        string query = " SELECT TABLE_NAME, COLUMN_NAME FROM  " + DropDownList1.SelectedItem + ".INFORMATION_SCHEMA.columns where TABLE_NAME = '" + DropDownList2.SelectedItem + "' ";
        con = new SqlConnection(ConfigurationManager.AppSettings["godb"].ToString());
        da = new SqlDataAdapter(query, con);
        dt = new DataTable();
        da.Fill(dt);
        DropDownList3.DataSource = dt.DefaultView.ToTable(true, "TABLE_NAME", "COLUMN_NAME");
        //DropDownList3.DataValueField = "TABLE_NAME";
        DropDownList3.DataTextField = "COLUMN_NAME";
        DropDownList3.DataBind();
    }
    catch (Exception) { }
}
}

編輯:-當我忽略DDL的' DataValueField '時,它運行良好。謝謝大家的支持...

這可能是多個自動回發事件,因此當它第一次觸發時,ddl1消失並在第二個事件中覆蓋所選項目。 當第二個事件發生時,它將重置為默認狀態。

您可以嘗試在兩者上使用相同的事件方法,具體取決於調用者填充的內容。

利用這兩個(對象發送者,EventArgs e):D

嘗試使用此代碼,它對我來說很好。

ASPX

<form id="form1" runat="server">
    <div>
    <asp:DropDownList  ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" >
    </asp:DropDownList>
    <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" >
    </asp:DropDownList> 
    <asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="True" >
    </asp:DropDownList>
    </div>
    </form>

的.cs

    public List<string> list1 { get; set; }
    public List<string> list2 { get; set; }
    public List<string> list3 { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            try
            {
                list1 = new List<string> { "a", "b", "c" };
                DropDownList1.DataSource = list1;
                DropDownList1.DataBind();
            }
            catch (Exception) { }
        }
    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            list2 = new List<string> { "1a", "1b", "1c" };
            DropDownList2.DataSource = list2; 
            DropDownList2.DataBind();
        }
        catch { }
    }

    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            list3 = new List<string> { "2a", "2b", "2c" };
            DropDownList3.DataSource = list3;
            DropDownList3.DataBind();
        }
        catch (Exception) { }
    }

我只是刪除了下拉菜單中的默認options ,並刪除了viewstatemode並使用了數據綁定而不是列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM