Как обновить строки динамической таблицы в .net updatepanel? - PullRequest
0 голосов
/ 13 декабря 2011

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

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) на стороне сервера через панель обновления?По какой-то причине таблица не отображается в состоянии просмотра при отправке сообщений назад, даже когда я принудительно заставляю viewstatemode = enabled.

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

Свежие идеи.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

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

0 голосов
/ 15 декабря 2011

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

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

Если это не так, пожалуйста, опубликуйте aspx-код панели обновления.

...