2011-10-25 20 views
1

私はデータベース内の各マシンの行を追加する動的に構築されたテーブルを持っています。各行には4つの列があり、テーブルに追加された2つの列にはRadComboBoxが含まれており、データベースからの特定の値を選択することができます。動的に構築されたコンボボックスから選択された値を取得する方法

テーブルの各行を構築する方法

 private void AddNewRow1(Machine Machine) 
    { 
     //start a new row 
     TableCell site = new TableCell(); 
     TableCell name = new TableCell(); 
     TableCell type = new TableCell(); 
     TableCell model = new TableCell(); 
     TableRow tr = new TableRow(); 
     Literal breakline = new Literal(); 
     breakline.Text = "<br />"; 
     Literal breakline1 = new Literal(); 
     breakline1.Text = "<br />"; 

     //site name column 
     site.RowSpan = 2; 
     site.Controls.Add(AddSiteField(Machine)); 
     tr.Controls.Add(site); 

     //machine name 
     name.RowSpan = 2; 
     name.Controls.Add(AddMachineField(Machine)); 
     tr.Controls.Add(name); 

     //machine type name 
     type.RowSpan = 2; 
     type.Controls.Add(AddMachineTypeField(Machine)); 
     type.Controls.Add(breakline); 
     type.Controls.Add(AddTypeComboBox()); 
     tr.Controls.Add(type); 

     //machine model name 
     model.RowSpan = 2; 
     model.Controls.Add(AddMachineModelField(Machine)); 
     model.Controls.Add(breakline1); 
     model.Controls.Add(AddModelComboBox()); 
     tr.Controls.Add(model); 

     AssignPlaceHolder.Controls.Add(tr); 
    } 

モデル及びタイプのメソッドAddModelComboBox()またはAddTypeComboBoxを(対照)は以下である:

 private RadComboBox AddModelComboBox() 
    { 
     RadComboBox MachineModelCombo = new RadComboBox(); 
     machineModel = inputsService.GetMachineModelList(SiteID); 
     foreach (MachineModel MachineModel in machineModel) 
     { 
      if (MachineModel.Name != "NULL") 
      {      
       MachineModelCombo.Items.Add(new RadComboBoxItem(MachineModel.Name, MachineModel.ID)); 
      } 
     } 

     MachineModelCombo.EnableLoadOnDemand = true; 
     MachineModelCombo.EmptyMessage = "Select a Machine Model"; 
     return MachineModelCombo; 
    } 

テーブルが正常に動作し、正しく構築されています。私は以下のコードでは私の問題を抱えてい が動的にコンボボックスを構築し、これらの値を取得するに関係しています:

 protected void Update_Click(object sender, EventArgs e) 
    { 
     string MachineTypeID; 
     string MachineModelID; 
     machine = inputsService.GetMachineSiteDetails(SiteID); 
     foreach (Machine Machine in machine) 
     { 
      try 
      { 
       RadComboBox machineTypeComboBox = new RadComboBox(); 
       RadComboBox machineModelComboBox = new RadComboBox(); 
       MachineTypeID = machineTypeComboBox.SelectedValue; 
       MachineModelID = machineModelComboBox.SelectedValue; 
       inputsService.UpdateMachineModels(Machine.ID, MachineTypeID); 
       inputsService.UpdateMachineTypes(Machine.ID, MachineModelID); 
      } 
      catch (Exception ex) 
      { 
       { 
        logger.ErrorFormat(
         "Update_Click exception occurred when attempting to update the database {0}", ex); 
       } 
      } 
     } 

私の質問は、私は動的に構築radcomboboxから選択された値を取得する方法、ありますか?

注:

   inputsService.UpdateMachineModels(Machine.ID, MachineTypeID); 
       inputsService.UpdateMachineTypes(Machine.ID, MachineModelID); 

これらの2行は、Webサービスは、Webページで選択した項目に応じて、データベースへの更新を行うためにDBのAPIへの呼び出しです。これはinputsServiceで始まるすべてのコールにも適用されます。*

何か助けや助言をいただければ幸いです。

おかげ

+0

更新イベントで作成したテーブルの行をループしていますか? –

+0

マシンオブジェクト内で見つかったマシンごとにループします。これはDBへの呼び出しによって取得されます。 – James213

答えて

1

わかりましたが、私は今それを見た後笑だから、私は場合にそれをここに投稿すると考えました誰がこの質問への答えを必要とします...かなり明白思えた、それを考え出しました。

この問題の解決策になったのは、それぞれのコンボボックスにidを所有させることでした。 これは、以下に次のコードで達成された:

これで、新しいコンボボックスのメソッドを作成修正:

private RadComboBox AddModelComboBox(Machine machine) 
    { 
     RadComboBox MachineModelCombo = new RadComboBox(); 
     machineModel = inputsService.GetMachineModelList(SiteID); 
     foreach (MachineModel MachineModel in machineModel) 
     { 
      if (MachineModel.Name != "NULL") 
      {      
       MachineModelCombo.Items.Add(new RadComboBoxItem(MachineModel.Name, MachineModel.ID)); 
      } 
     } 

     MachineModelCombo.ID = machine.ID.ToString() + "model"; 
     MachineModelCombo.EnableLoadOnDemand = true; 
     MachineModelCombo.EmptyMessage = "Select a Machine Model"; 
     return MachineModelCombo; 
    } 

マシンはDBになり、マシンのIDをグラブを。型とモデルのメソッドが同じidを取得しないようにするために、文字列がマシンIDに追加されました。

は、今私は次のコードを使用radComboBoxから選択された値を得るために:

注:これはまだ開発中であり、検証、およびキャッチを含みません。

 protected void Update_Click(object sender, EventArgs e) 
    { 
     string MachineTypeID; 
     string MachineModelID; 
     machine = inputsService.GetMachineSiteDetails(SiteID); 
     foreach (Machine Machine in machine) 
     { 
      try 
      { 
       string machinetypeid = Machine.ID.ToString() + "type"; 
       string machinemodelid = Machine.ID.ToString() + "model"; 
       Control type = MyExtensions.FindControlRecursive(this, machinetypeid); 
       Control model = MyExtensions.FindControlRecursive(this, machinemodelid); 
       RadComboBox machinetype = (RadComboBox) type; 
       RadComboBox machinemodel = (RadComboBox) model; 
       MachineTypeID = machinetype.SelectedValue; 
       MachineModelID = machinemodel.SelectedValue; 
       inputsService.UpdateMachineModels(Machine.ID, MachineModelID); 
       inputsService.UpdateMachineTypes(Machine.ID, MachineTypeID); 
      } 
      catch (Exception ex) 
      { 
       { 
        logger.ErrorFormat(
         "Update_Click exception occurred when attempting to update the database {0}", ex); 
       } 
      } 
     } 
     //clear out the old table and replace with the newly revized table. 
     AssignPlaceHolder.Controls.Clear(); 
     AddTableTitles(); 
     UpdateTableControls(); 
    } 

注:第二の方法でコントロールは、それがHTMLでID/rootのそのを通じて選択された値を取得する見つけることによって動的に構築された制御を得る方法です。

関連する問題