Проблема с привязкой таблицы HTML - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть функция со следующим кодом, которая динамически связывает таблицу. Я вызываю эту функцию при загрузке страницы. После вызова этого метода таблица содержит три столбца: флажок, метку и текстовое поле.

У меня также есть кнопка управления. Когда эта кнопка нажата, я проверяю отмеченные флажки внутри таблицы и затем вставляю в базу данных данные, соответствующие отмеченному флажку.

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

Я не могу использовать Page.IsPostBack здесь, потому что таблица должна быть загружена при нажатии кнопки. Если я напишу приведенный ниже код внутри if (! Page.IsPostBack), то при нажатии кнопки не будет найдено ни одной строки в таблице

try
{
    ManageVIN objMngVin = new ManageVIN();
    DataTable tblVins = objMngVin.MyFunction(clientCode);
    if (tblAssociateFleet.Rows.Count > 1)
    {
        for (int i = 1; i <= tblAssociateFleet.Rows.Count - 1; i++)
        {
            tblAssociateFleet.Rows[i].Cells.Clear();
        }
    }
    if (tblVins != null && tblVins.Rows.Count > 0)
    {
        foreach (DataRow dr in tblVins.Rows)
        {
            HtmlTableRow tblRow = new HtmlTableRow();
            tblRow.Attributes.Add("class", "tblrow");
            HtmlTableCell tblCell1 = new HtmlTableCell();
            CheckBox chk = new CheckBox();
            chk.CssClass = "selctChk";
            if (!Page.IsPostBack)
            {
                chk.Checked = false;
            }
            tblCell1.Controls.Add(chk);
            HtmlTableCell tableCelll2 = new HtmlTableCell();
            Label lblVinVlaue = new Label();
            lblVinVlaue.Text = Convert.ToString(dr["VIN"]);
            tableCelll2.Controls.Add(lblVinVlaue);
            HtmlTableCell tableCell3 = new HtmlTableCell();
            TextBox txtVinVal = new TextBox();
            txtVinVal.CssClass = "textEntry";
            tableCell3.Controls.Add(txtVinVal);
            tblRow.Cells.Add(tblCell1);
            tblRow.Cells.Add(tableCelll2);
            tblRow.Cells.Add(tableCell3);
            tblAssociateFleet.Rows.Add(tblRow);
        }
    }
}

Как мне справиться с этой проблемой?

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Похоже, то, как вы это делаете, довольно близко к правильному.

Однако я вижу одну проблему.У вас есть блок, который гласит:

if (!Page.IsPostBack)
{
  chk.Checked = false;
}

Удалите этот блок полностью.Проблема в том, что на postback asp.net отображает страницу дважды.При первом рендере эта строка убивает состояние флажка.

Я знаю, что Hexxagonal сказал сделать это в init или preinit части жизненного цикла, однако у нас есть МНОГО страниц, которые динамически генерируют элементы управления,Для тех, кто всегда обрабатывает генерацию в page_load, и она отлично работает.

1 голос
/ 07 декабря 2011

Это следует делать в жизненном цикле Init или PreInit. PreInit - предпочтительное место для этого согласно MS. Если вы взгляните на жизненный цикл страницы ASP.NET Загрузка будет слишком запоздалой (в частности, отсутствует IPostBackDataHandler.LoadPostData, которая обрабатывает данные обратной передачи ваших нажатий флажков).

Кроме того, это похоже на этот вопрос переполнения стека .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...