2012-03-14 2 views
1

Я использую элементы управления ext.net 1.3 в своем приложении ASP.NET 4.0. У меня есть несколько элементов управления ComboBox в моей веб-форме. На этой странице предполагается выполнить две задачи: «Вставить» и «Обновить». При записи новой записи проблем нет, но когда я пытаюсь заполнить элементы управления ComboBox существующими значениями базы данных, возникают различные проблемы. Наиболее тревожным является этот:Почему элементы ComboBox необходимо переустанавливать для получения значения?

ComboBox отображает текст из базы данных, но он не заполняется, и я не могу выбрать член Value ComboBox. Это потому, что он не заселен. Я написал код для заполнения ComboBox в событии Page Load.

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

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

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

Этот код успешно извлекает имя клиента и отображает в ComboBox. То, что он не делает, заключается в том, что он не выбирает из списка элементов ComboBox и не заполняет ComboBox.

Если я пытаюсь получить значение Участник текста с помощью:

CustomerComboBox.SelectedItem.Value; 

это дает ошибку.

Чтобы заставить его работать, мне нужно снова щелкнуть на ComboBox, чтобы он заполнился, и я вручную выбираю одно и то же имя клиента из списка, чтобы выбрать значение.

Как избавиться от этой проблемы?

- ред -

Код для заполнения ext.net ComboBox это:

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 */ 
    } 

По событию загрузки страницы, управления ComboBox заполнен описанным выше способом.

ответ

0

Я не вижу инструкции заполнить поле со списком, чтобы установить его выбранное значение. Arent вам не хватает CustomerComboBox.DataSource = someList или что-то в этом роде?

< - EDIT ->

К сожалению, я думал, что 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

Как я сказал, что ComboBox заполняется на PageLoad. Отредактировано сообщение с кодом. – RKh

+0

Пожалуйста, проигнорируйте последнюю путаницу строк DropDownName и CustomerComboBox. Первый параметр, а второй - имя ComboBox. – RKh

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

+0

Попробуйте SetValueAndFireSelect. Список со значениями ComboBox? Можете ли вы показать ясный пример, без взаимодействия с DataBase и на одной странице ASPX. Я попытаюсь воспроизвести это странное поведение. – Baidaly