2011-01-21 12 views
0

プログラムでコントロールテーブルを作成していますが、ユーザーがボタンをクリックして値を取得した後にしたいと思います。プログラムで生成されたテーブルからデータを取得

表は、3つの列、{タイトル(のDropDownList)ます。FName(テキストボックス)、L-NAME(テキストボックス)}と2つの行を有します。

問題なくFName、LNameの値を取得していますが、DropDownListであるTitleの値が間違っています。 2番目の列の選択された値であるタイトルの両方を取得できます。第二行優先のための>さん、フー、バー

- -

より明確に、1行目については

>夫人、フー、バー

ユーザーがボタンをクリックした後私は、1行目について

を取得しています - >夫人、フー、バー

第2行 - >夫人の場合、Foo1、Bar。

これは

private void SetPassengerDetailsTable(int roomIdentity, int? adults, 
     int? children, int? infants, bool setLeader = false) { 
     var leaderIsSet = false; 
     var roomTable = new Table(); 
     roomTable.ID = "PassengerDetailsTBL_" + roomIdentity; 
     var trHeader = new TableHeaderRow(); 
     var tcTitle = new TableCell(); 
     tcTitle.Controls.Add(new Label() { Text = "<b>Title</b>" }); 
     trHeader.Cells.Add(tcTitle); 

     var tcFName = new TableCell(); 
     tcFName.Controls.Add(new Label() { Text = "<b>First Name</b>" }); 
     trHeader.Cells.Add(tcFName); 

     var tcLName = new TableCell(); 
     tcLName.Controls.Add(new Label() { Text = "<b>Last Name</b>" }); 
     trHeader.Cells.Add(tcLName); 

     var tcType = new TableCell(); 
     tcType.Controls.Add(new Label() { Text = "<bType</b>" }); 
     trHeader.Cells.Add(tcType); 

     roomTable.Rows.Add(trHeader); 

     var listItems = new ListItem[6]; 
     listItems[0] = new ListItem("", "") { Selected = true }; 
     listItems[1] = new ListItem("Mr", "Mr"); 
     listItems[2] = new ListItem("Mrs", "Mrs"); 
     listItems[3] = new ListItem("Miss", "Miss"); 
     listItems[4] = new ListItem("Infant", "Inf"); 
     listItems[5] = new ListItem("Child", "Master"); 


     if (adults != null || adults > 0) { 
      for (int i = 1; i <= adults; i++) { 
       var trBody = new TableRow(); 
       var ddl = new DropDownList(); 
       var leadAdultRowID = setLeader && !leaderIsSet ? "leadadult" : "adult"; 
       ddl.ID = "room" + roomIdentity + leadAdultRowID + i + "Title"; 
       ddl.Items.AddRange(listItems); 

       var tcTitleValue = new TableCell(); 
       tcTitleValue.Controls.Add(ddl); 
       trBody.Cells.Add(tcTitleValue); 

       var tcFNameValue = new TableCell(); 
       tcFNameValue.Controls.Add(new TextBox() { ID = "room" + roomIdentity + "adult" + i + "FName", Width = 170 }); 
       trBody.Cells.Add(tcFNameValue); 

       var tcLNameValue = new TableCell(); 
       tcLNameValue.Controls.Add(new TextBox() { ID = "room" + roomIdentity + "adult" + i + "LName", Width = 170 }); 
       trBody.Cells.Add(tcLNameValue); 

       var tcTypeValue = new TableCell(); 
       var leadAdult = setLeader && !leaderIsSet ? "Lead Adult" : "Adult"; 
       tcTypeValue.Controls.Add(new Label() { Text = leadAdult }); 
       trBody.Cells.Add(tcTypeValue); 
       roomTable.Rows.Add(trBody); 

       if (setLeader) 
        leaderIsSet = true; 
      } 
     } 

     if (children != null || children > 0) { 
      for (int i = 1; i <= children; i++) { 
       var trBody = new TableRow(); 
       var ddl = new DropDownList(); 
       ddl.ID = "room" + roomIdentity + "child" + i + "Title"; 
       ddl.Items.AddRange(listItems); 

       var tcTitleValue = new TableCell(); 
       tcTitleValue.Controls.Add(ddl); 
       trBody.Cells.Add(tcTitleValue); 

       var tcFNameValue = new TableCell(); 
       tcFNameValue.Controls.Add(new TextBox() { ID = "room" + roomIdentity + "child" + i + "FName", Width = 170 }); 
       trBody.Cells.Add(tcFNameValue); 

       var tcLNameValue = new TableCell(); 
       tcLNameValue.Controls.Add(new TextBox() { ID = "room" + roomIdentity + "child" + i + "LName", Width = 170 }); 
       trBody.Cells.Add(tcLNameValue); 

       var tcTypeValue = new TableCell(); 
       tcTypeValue.Controls.Add(new Label() { Text = "Child" }); 
       trBody.Cells.Add(tcTypeValue); 
       roomTable.Rows.Add(trBody); 
      } 
     } 

     if (infants != null || infants > 0) { 
      for (int i = 1; i <= infants; i++) { 
       var trBody = new TableRow(); 
       var ddl = new DropDownList(); 
       ddl.ID = "room" + roomIdentity + "infan" + i + "Title"; 
       ddl.Items.AddRange(listItems); 

       var tcTitleValue = new TableCell(); 
       tcTitleValue.Controls.Add(ddl); 
       trBody.Cells.Add(tcTitleValue); 

       var tcFNameValue = new TableCell(); 
       tcFNameValue.Controls.Add(new TextBox() { ID = "room" + roomIdentity + "infan" + i + "FName", Width = 170 }); 
       trBody.Cells.Add(tcFNameValue); 

       var tcLNameValue = new TableCell(); 
       tcLNameValue.Controls.Add(new TextBox() { ID = "room" + roomIdentity + "infan" + i + "LName", Width = 170 }); 
       trBody.Cells.Add(tcLNameValue); 

       var tcTypeValue = new TableCell(); 
       tcTypeValue.Controls.Add(new Label() { Text = "Infant" }); 
       trBody.Cells.Add(tcTypeValue); 
       roomTable.Rows.Add(trBody); 
      } 
     } 
     PassengerDetailsPH.Controls.Add(roomTable); 
    } 

おかげ

答えて

0

は、DropDownListの

var ddlItems = listItems.ToArray(); 

ddl.Items.Addrange(ddlItems); 

のすべてのインスタンスのための新しいのlistItemsリストを作成するテーブル作成する方法である(あなたは、GridViewコントロールを見てきましたか? )

+0

私はこれを試します。はい、私はGridViewのコントロールを知っていますが、私はこれを使っているので、解決したいと思います。そうでなければ、GridViewでこれを行います。 – StrouMfios

+0

何も変更されていません。 – StrouMfios

+0

最後に、別々のインスタンシエーションで動作しました。ありがとう – StrouMfios

1

あなたのドロップdのために生成されるクライアント側のID所有しています。

テーブルが正しく(正しいIDが一意でなければならない)正しくレンダリングされた場合、読み込みコードは間違った要素から読み取られます。

+0

私はそれをチェックし、IDは一意です。それが私の心の中で最初に起こったと思ったのですか? – StrouMfios

+0

それぞれのポストバックでテーブルを再構築すると問題が起こります。コードを読み込んでデバッグし、正しい要素IDが読み取られているかどうかを確認します。私は、定期的なポストバックがすべてのコントロールで選択された値を保持し、コントロールを変更しないと仮定しています。 – Leon

関連する問題