2013-04-22 3 views
0

Я не могу отображать Combobox при попытке привязки с переменной хранилища во время выполнения.Как заполнять comboBox динамически?

// Aspx page.

<%@ Page Language="C#" %> 

<%@ Import Namespace="System.Collections.Generic" %> 
<%@ Import Namespace="System.Data.SqlClient" %> 
<%@ Import Namespace="System.Data" %> 
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %> 
<!DOCTYPE html> 
<html> 
<head id="Head1" runat="server"> 
    <title>Ext.NET Examples</title> 

    <script runat="server"> 
     Store storeTable; 
     private void createStoreTable() 
     { 
      storeTable = new Store(); 
      storeTable.ID = "storeTable"; 
      Ext.Net.Model model = new Model(); 
      ModelField modelField = new ModelField(); 
      modelField.Name = "name"; 
      model.Fields.Add(modelField); 
      storeTable.Model.Add(model); 

     } 
     private DataTable GetDataTable() 
     { 
      DataTable table = new DataTable(); 

      table.Columns.AddRange(new DataColumn[] { 
      new DataColumn("name") { ColumnName = "name", DataType = typeof(string) }, 
      new DataColumn("ID")  { ColumnName = "ID",  DataType = typeof(double) } 
     }); 

      foreach (object[] obj in this.Data) 
      { 
       table.Rows.Add(obj); 
      } 

      return table; 
     } 
     private object[] Data 
     { 
      get 
      { 
       DateTime now = DateTime.Now; 

       return new object[] 
      { 
       new object[] { "peter", 1 }, 
       new object[] { "John", 2}, 
       new object[] { "Stella", 3} 
      }; 
      } 
     } 
     private void PopulateEmp() 
     { 
      try 
      { 
       createStoreTable(); 
       this.storeTable.DataSource = GetDataTable(); 
       cboTable.Store.Add(storeTable); 
       cboTable.DisplayField = "name"; 
       cboTable.ValueField = "ID"; 
       cboTable.Render(); 
      } 
      catch (Exception ex) 
      { 
       X.Msg.Show(new MessageBoxConfig 
       { 
        Message = ex.Message, 
        Title = "Error Message", 
        Width = 300, 
        Buttons = MessageBox.Button.OKCANCEL 
       }); 
       X.Msg.Show(); 
       //Response.Write(ex.Message); 
      } 
     } 
     protected void cboTable_Change(object sender, EventArgs e) 
     { 
      PopulateEmp(); 
     } 

     protected void Page_Load(object sender, EventArgs e) 
     { 


     } 
</script> 

</head> 
<body> 
    <form id="form1" runat="server"> 
    <ext:ResourceManager ID="ResourceManager1" runat="server" /> 
    <ext:FormPanel ID="frmPanel1" runat="server"> 
     <Items> 
      <ext:ComboBox runat="server" ID="cboDB" FieldLabel="select comp" Text="delete"> 
       <Items> 
        <ext:ListItem Text="MS" Value="MS"/> 
        <ext:ListItem Text="Oracle" Value="Oracle" /> 
        <ext:ListItem Text="Java" Value="Java" /> 
       </Items> 
       <DirectEvents> 
        <Select OnEvent="cboTable_Change" /> 
       </DirectEvents> 
      </ext:ComboBox> 
      <ext:ComboBox ID="cboTable" runat="server" FieldLabel="Select Emp"> 
      </ext:ComboBox> 
      <ext:TextField runat="server" ID="lblTest" FieldLabel="Name" /> 
      <ext:Button ID="btnSearch" runat="server" Text="Search" /> 
     </Items> 
    </ext:FormPanel> 
    </form> 
</body> 
</html> 

В этом вышеприведенном примере у меня есть один текстовый блок и одна кнопка, представленная после 2-го списка. В то время как я пытаюсь отобразить еще один combobox при выборе 1-го ComboBox, он работает нормально, но второй выпадающий рендеринг в конце.

ответ

0

Пожалуйста, замените

cboTable.Render(); 

с

cboTable.InsertTo(1, this.frmPanel1); 

Кроме того, я бы поставил

cboTable.SuspendScripting(); 

к началу блока Try. В противном случае это

cboTable.DisplayField = "name"; 
cboTable.ValueField = "ID"; 

производит JavaScript, чтобы отразить свойства клиентской стороны. Но это не требуется, так как вы повторно просматриваете ComboBox.

+0

Даниил ваш превосходный. теперь он работает отлично. Большое спасибо. Я отмечаю это как ответ. – SarojRajSwain

Смежные вопросы