簡體   English   中英

如何在 asp:dropdownlist after.Page?IsPostBack 中保留我的項目?

[英]How do I keep my items in asp:dropdownlist after !Page.IsPostBack?

我通過調用存儲過程將值/文本列表加載到 asp:dropdownlist 中。 我在 a.Page:IsPostBack 塊內的 PageLoad 方法上填充下拉列表,如下所示:

if (!Page.IsPostBack)
{
     GetDropDownLists();
     DataBind();
}

這是我的后端代碼實現:

protected void GetDropDownLists()
{
     DataTable dt = new DataTable();

     SqlConnection conn = new SqlConnection(connString);
     SqlCommand cmd = new SqlCommand("get_articletype", conn);
     cmd.CommandType = CommandType.StoredProcedure;
     SqlDataAdapter adapter = new SqlDataAdapter(cmd);
               
     adapter.Fill(dt);
     xArticleTypeList.Items.Clear();
     xArticleTypeList.Items.Insert(0, new ListItem("- Select.. -", "0"));
     xArticleTypeList.SelectedIndex = 0;
     xArticleTypeList.DataSource = dt;
     xArticleTypeList.DataValueField = "TypeValue";
     xArticleTypeList.DataTextField = "TypeName";
     xArticleTypeList.DataBind();
}

如果我的代碼不在 a.Page,IsPostBack 塊內。 單擊保存按鈕后,默認值將始終是下拉列表的第一項。 但是,一旦我將代碼放入 .Page:IsPostBack 塊中,我的下拉列表就是空的。 這里的參考是我的 asp:dropdownlist 的前端實現。

<asp:DropDownList ID="xArticleTypeList" EnableViewState="true" AutoPostBack="true" CssClass="form-control" runat="server" />

我知道還有其他主題涵蓋了這個問題,但沒有一個建議的解決方案對我有用。 提前感謝您的投入。

您的問題是您在綁定之前插入空白請 select 行。 結果,當您綁定時,您正在吹掉下拉列表。

試試這種方式:

   protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadData();
    }


    void LoadData()
    {
        using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
        {
            using (SqlCommand cmd = new SqlCommand("get_articletype", conn))
            {
                DataTable dt = new DataTable();
                cmd.CommandType = CommandType.StoredProcedure;
                conn.Open();
                dt.Load(cmd.ExecuteReader());

                xArticleTypeList.DataSource = dt;
                xArticleTypeList.DataValueField = "TypeValue";
                xArticleTypeList.DataTextField = "TypeName";
                xArticleTypeList.DataBind();

                xArticleTypeList.Items.Insert(0, new ListItem("- Select.. -", "0"));
            }
        }
    }

並 GET RID of your extra call re-bind 你有這個:

 GetDropDownLists();
 DataBind();   <--- remove unless you need, or execute BEFORE the GetDropDownList()

因此,將您的添加/插入空白行移動到下拉數據綁定之后。

並刪除你的 DataBind() - 你不需要它,如果由於某種原因你需要它,然后將 DataBind() 移動到加載 GetDropDownLists() 之前 - 但我的猜測是你只是希望扔掉它做這項工作,它會導致組合框重新選擇 - 所以刪除,除非你給出一個非常好的高質量大綱和敘述你為什么在那里有 DataBin() 命令 - (但如前所述,如果您確實,但確實確實需要執行該 DataBind() 命令-將其移至組合加載之前)。

所以,在后面添加空白行

暫無
暫無

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

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