2011-12-12 2 views
0

У меня есть панель обновления, в которой хранится таблица. В таблице динамически генерирует строки входных элементов для различных полей свойств:Как обновить строки динамической таблицы в .net updatepanel?

foreach (DataRow propertyRowToDraw in temporaryTableOfProperties.Rows) 
    { 
     // Create the property row 
     TableRow propertyRow = new TableRow(); 

     // Create the first cell, and give it a value of the property ID, but don't display it 
     TableCell propertyIDColumn = new TableCell(); 
     propertyIDColumn.Text = propertyRowToDraw["PropertyId"].ToString(); 
     propertyIDColumn.Visible = false; 
     propertyRow.Cells.Add(propertyIDColumn); 

     // Create the second cell and give it a value of the text, or prompt, for that property 
     TableCell propertyNameColumn = new TableCell(); 
     propertyNameColumn.ID = "propertyName" + propertyRowToDraw["PropertyId"].ToString(); 
     propertyNameColumn.Text = propertyRowToDraw["Prompt"].ToString(); 
     propertyNameColumn.Width = Unit.Percentage(15); 
     propertyRow.Cells.Add(propertyNameColumn); 


     // Not sure what this does 
     TableCell propertyHiddenValuesColumn = new TableCell(); 
     propertyHiddenValuesColumn.ID = "hiddenValues" + propertyRowToDraw["PropertyId"].ToString(); 
     propertyHiddenValuesColumn.Attributes.CssStyle.Add("display", "none"); 
     HiddenField hiddenPropertyDataType = new HiddenField(); 
     hiddenPropertyDataType.Value = propertyRowToDraw["DataType"].ToString(); 
     propertyHiddenValuesColumn.Controls.Add(hiddenPropertyDataType); 
     propertyRow.Cells.Add(propertyHiddenValuesColumn); 

     // Create a new cell for the property data type 
     TableCell propertyDataTypeColumn = new TableCell(); 
     propertyDataTypeColumn.ID = "propertyDataType" + propertyRowToDraw["PropertyId"].ToString(); 

     // Create a dropdown list for the property data type for this cell 
     DropDownList inquiryTypeSelection = new DropDownList(); 
     inquiryTypeSelection.Width = Unit.Percentage(100); 

     // Cast it to the propertyDataType enum and do a switch to determine what items to add to the dropdown 
     switch ((Altec.Framework.PropertyDataType)Convert.ToInt32(propertyRowToDraw["DataType"])) 
     { 
      case PropertyDataType.Date: 
       inquiryTypeSelection.Items.Add(new ListItem("Exactly", "2")); 
       inquiryTypeSelection.Items.Add(new ListItem("Greater Then", "3")); 
       inquiryTypeSelection.Items.Add(new ListItem("Less Then", "4")); 
       inquiryTypeSelection.Items.Add(new ListItem("Range", "5")); 
       break; 

      case PropertyDataType.Boolean: 
       inquiryTypeSelection.Items.Add(new ListItem("Exactly", "2")); 
       break; 

      case PropertyDataType.Currency: 
       inquiryTypeSelection.Items.Add(new ListItem("Any", "1")); 
       inquiryTypeSelection.Items.Add(new ListItem("All", "0")); 
       inquiryTypeSelection.Items.Add(new ListItem("Greater Then", "3")); 
       inquiryTypeSelection.Items.Add(new ListItem("Less Then", "4")); 
       inquiryTypeSelection.Items.Add(new ListItem("Range", "5")); 
       break; 

      case PropertyDataType.Double: 
       inquiryTypeSelection.Items.Add(new ListItem("Any", "1")); 
       inquiryTypeSelection.Items.Add(new ListItem("All", "0")); 
       inquiryTypeSelection.Items.Add(new ListItem("Greater Then", "3")); 
       inquiryTypeSelection.Items.Add(new ListItem("Less Then", "4")); 
       inquiryTypeSelection.Items.Add(new ListItem("Range", "5")); 
       break; 

      case PropertyDataType.String: 
       inquiryTypeSelection.Items.Add(new ListItem("Any", "1")); 
       inquiryTypeSelection.Items.Add(new ListItem("All", "0")); 
       break; 
     } 

     // Add the dropdown to the cell and then add the cell to the row 
     propertyDataTypeColumn.Width = Unit.Percentage(15); 
     propertyDataTypeColumn.Controls.Add(inquiryTypeSelection); 
     propertyRow.Cells.Add(propertyDataTypeColumn); 


     // Create the cell that will hold the input box 
     propertyIDColumn = new TableCell(); 
     propertyIDColumn.ID = "propertyInputColumn" + propertyRowToDraw["PropertyId"].ToString(); 

     // Create the textbox input that will hold the search value for that property row 
     TextBox propertyTextInput = new TextBox(); 
     propertyTextInput.ID = "propertyInputText" + propertyRowToDraw["PropertyId"].ToString(); 
     propertyIDColumn.Controls.Add(propertyTextInput); 
     propertyTextInput.Width = Unit.Percentage(92); 
     // Add it to the row 
     propertyRow.Cells.Add(propertyIDColumn); 

     // Add the row to the overall table 
     docTypePropertiesTable.Rows.Add(propertyRow); 


    } 

Как я мог бы получить входные значения в этих текстовых полей (propertyTextInput) на стороне сервера через UpdatePanel? По какой-то причине таблица не отображается в представлении, когда она отправляется обратно - даже когда я принудительно включаю viewstatemode = enabled.

Мне нужно сгенерировать строки динамически, потому что есть переменное количество строк на основе других элементов ввода на странице.

Свежий из идей.

ответ

0

Элементы с динамически добавленными элементами управления - это то, что должно быть в формате в каждой обратной передаче или они не будут доступны на стороне сервера.

Вы добавляете элементы управления только один раз в! IsPostBack? если да, то удалите проверку! IsPostBack и прочитайте элементы управления при каждой обратной передаче.

Если это не так, отправьте код aspx панели обновления.

0

Если у вас был конечный ряд элементов, скажем 10, вы могли бы создать 10 пустых строк в таблице во время разработки, а затем динамически их заполнить со страницы. Если вам нужно динамическое количество строк, я считаю, что вам нужно будет сохранить свою дату в viewstate - у меня есть идентичная проблема, поэтому вы сможете опубликовать некоторый пример кода за короткое время.

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