2012-03-14 69 views
1

我在我的ASP.NET 4.0應用程序中使用ext.net 1.3控件。我的Web窗體上有幾個ComboBox控件。該頁面應該執行兩個任務,插入和更新。保存新記錄時沒有問題,但是當我嘗試用現有數據庫值填充ComboBox控件時,會彈出各種問題。最令人不安的是這一個:爲什麼ComboBox項目需要重新選擇才能獲得價值?

ComboBox顯示來自數據庫的文本,但它既沒有被填充,也沒有我能夠選擇ComboBox值成員。這是因爲它沒有填充。我已經編寫代碼來在頁面加載事件中填充ComboBox。

我使用此代碼來接從數據庫中的值,並顯示在組合框:

string Query = "SELECT CustName FROM CustomerMaster WHERE CustID = " + Session["CustomerID"]; 

var result = DB.Single<Customer>(Query); 
CustomerComboBox.setValue = result.CustName; 

此代碼成功地檢索ComboBox中客戶名稱和顯示。它沒有做的是它不是從組合框項目列表中選擇,也沒有填充組合框。

如果我嘗試使用檢索文本值的成員:

CustomerComboBox.SelectedItem.Value; 

提示錯誤。

爲了使它工作,我需要再次點擊組合框使其填充,而不是從列表中手動選擇相同的客戶名稱來選擇值。

如何擺脫這個問題?

- 編輯 -

的代碼來填充ext.net組合框是這樣的:

public void FillExtComboList(string ParameterFlag, ComboBox DropDownName) 
    { 
     string Query = ""; 
     using (TransactionScope transactionScope = new TransactionScope()) 
     { 
      using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cncustomer"].ConnectionString.ToString())) 
      { 
       con.Open(); 
       SqlDataReader dr; 
       try 
       { 
        if (ParameterFlag == "Customer") 
        { 
         Query = "SELECT CustName FROM CustomerMaster"; 
        } 
        //Check whether the Drop Down has existing items. If YES, empty it. 
        if (DropDownName.Items.Count > 0) 
         DropDownName.Items.Clear(); 

        SqlCommand cmd = new SqlCommand(Query, con); 
        dr = cmd.ExecuteReader(); 

        while (dr.Read()) 
        { 
         Ext.Net.ListItem extLI = new Ext.Net.ListItem(); 
         extLI.Text = dr[0].ToString(); 
         DropDownName.Items.Add(extLI); 
        } 

        dr.Close(); 
        con.Close(); 
       } 
       catch (Exception ex) 
       { 
        con.Close(); 
        // RunCustomScript("alert('" + ex.Message.ToString() + "')", callingPageObjectName); 
       } 
      } /* End of SQL Connection */ 
      transactionScope.Complete(); 
     } /* End of Transaction Scope */ 
    } 

在頁加載事件,組合框控件填充有上述方法。

回答

0

我看不到填充組合框的指令,只能設置其選定值。 Arent你錯過了一個CustomerComboBox.DataSource = someList或類似的東西?

< - 編輯 - >

對不起,我以爲是的setValue在您的網頁加載代碼... OK,這是不是會回答你的問題,但一個重要的性能修復。 裝載組合時,你應該這樣做:在執行SQL查詢時 :

Query = "SELECT CustID, CustName FROM CustomerMaster" 

填充組合時:

Ext.Net.ListItem extLI = new Ext.Net.ListItem(); 
extLI.Value = dr["CustId"].ToString();       
extLI.Text = dr["CustName"].ToString(); 
DropDownName.Items.Add(extLI); 

所以當你要選擇一個項目,你只是這樣做:

CustomerComboBox.setValue = Session["CustomerID"]; 

並避免返回到數據庫獲取客戶名稱。

現在,你可以分享你必須處理組合框點擊的代碼嗎?既然它確實填補了這個組合,它可能會給我們帶來一些代價。此外,嘗試添加

CustomerComboBox.DataBind() 

而且,想起來了,我看到的Page_Load你用「DropDownName」,後來您使用「CustomerComboBox」。這可能是問題嗎?

+0

正如我所說的組合框填充在pageLoad的。用代碼編輯帖子。 – RKh 2012-03-14 12:39:05

+0

請忽略DropDownName和CustomerComboBox的最後一行混淆。前者是參數,而後者是ComboBox的名稱。 – RKh 2012-03-15 04:53:47

0

如果我理解你正確地試試這個代碼:

protected void Page_Load(object sender, EventArgs e) { 
     FillExtComboList(DropDownName); 

     // Set value that you want 
     DropDownName.SetValueAndFireSelect("Test 3"); 
    } 

    public void FillExtComboList(ComboBox DropDownName) { 
     try { 

      //Check whether the Drop Down has existing items. If YES, empty it. 
      if (DropDownName.Items.Count > 0) 
       DropDownName.Items.Clear(); 


      for (int i = 0; i < 10; i++) { 
       Ext.Net.ListItem extLI = new Ext.Net.ListItem(); 
       extLI.Text = "Test " + i; 
       DropDownName.Items.Add(extLI); 
      } 
     } catch (Exception ex) { 
      // RunCustomScript("alert('" + ex.Message.ToString() + "')", callingPageObjectName); 
     } /* End of Transaction Scope */ 
    } 
+0

setValue無法正常工作。雖然它設定了價值,但列表消失了。 – RKh 2012-03-17 10:06:45

+0

嘗試使用SetValueAndFireSelect。列出ComboBox的值?你能否展示一些清晰的例子,沒有數據庫交互和單個ASPX頁面。我會盡力重現這種奇怪的行爲。 – Baidaly 2012-03-18 09:07:00

相關問題