Динамические строки в таблице c #

1

два вопроса:

1:

Я использую обновление состояния сеанса для подсчета количества перезагрузок страниц, но при использовании ряда утверждений if проверка не работает. Код внизу. Что я делаю не так?

2: Использование состояния сеанса в отношении обратной передачи не представляется наиболее эффективным способом для этого, если я добавлю другую таблицу с одинаковой функциональностью, счет будет влиять на обе таблицы. Например, если бы я хотел, чтобы люди могли добавлять максимум три строки в таблицу, в двух таблицах они могли бы добавить только четыре строки.

Что было бы лучшим способом хранения счета для отдельных обновлений?

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

В основном каждая итерация удаляет существующую строку, а затем добавляет одну строку снова. Поэтому никогда не будет более одного ряда.

Есть идеи?

namespace FormTest
{
    public partial class About : Page
    {
        protected void Page_Load(object sender, System.EventArgs e)
        {
            tbl.BorderStyle = BorderStyle.Inset;
            tbl.BorderWidth = Unit.Pixel(1);

        if (!Page.IsPostBack)
        {
            Session["count"] = 0;
        }
        else
        {
            int count = (int)Session["count"];
            count++;
            Session["count"] = count;
        }
    }

    protected void cmdCreate_Click(object sender, System.EventArgs e)
    {
        tbl.Controls.Clear();

        int rows = 1;
        int cols = 4;

        if ((int)Session["count"] == 0)
        {
            for (int i = 0; i < rows; i++)
            {
                TableRow rowNew = new TableRow();
                tbl.Controls.Add(rowNew);
                for (int j = 0; j < cols; j++)
                {
                    TableCell cellNew = new TableCell();
                    Label lblNew = new Label();
                    lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";

                    TextBox tbNew = new TextBox();
                    cellNew.Controls.Add(lblNew);
                    cellNew.Controls.Add(tbNew);

                    rowNew.Controls.Add(cellNew);
                }
            }
        }
        else
        {
            if ((int)Session["count"] == 1)
            {
                for (int i = 0; i < rows; i++)
                {
                    TableRow rowNew = new TableRow();
                    tbl.Controls.Add(rowNew);
                    for (int j = 0; j < cols; j++)
                    {
                        TableCell cellNew = new TableCell();
                        Label lblNew = new Label();
                        lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";

                        TextBox tbNew = new TextBox();
                        cellNew.Controls.Add(lblNew);
                        cellNew.Controls.Add(tbNew);

                        rowNew.Controls.Add(cellNew);
                    }
                }
            }
            else
            {
                if ((int)Session["count"] == 2)
                {
                    for (int i = 0; i < rows; i++)
                    {
                        TableRow rowNew = new TableRow();
                        tbl.Controls.Add(rowNew);
                        for (int j = 0; j < cols; j++)
                        {
                            TableCell cellNew = new TableCell();
                            Label lblNew = new Label();
                            lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";

                            TextBox tbNew = new TextBox();
                            cellNew.Controls.Add(lblNew);
                            cellNew.Controls.Add(tbNew);

                            rowNew.Controls.Add(cellNew);
                        }
                    }
                }
                else
                {
                    if ((int)Session["count"] == 3)
                    {
                        for (int i = 0; i < rows; i++)
                        {
                            TableRow rowNew = new TableRow();
                            tbl.Controls.Add(rowNew);
                            for (int j = 0; j < cols; j++)
                            {
                                TableCell cellNew = new TableCell();
                                Label lblNew = new Label();
                                lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";

                                TextBox tbNew = new TextBox();
                                cellNew.Controls.Add(lblNew);
                                cellNew.Controls.Add(tbNew);

                                rowNew.Controls.Add(cellNew);
                            }
                        }
                    }
                    else
                    {
                        Response.Redirect("http://www.google.co.uk");
                    }
                }
            }
        }

    }//end cmdCreate_Click
}
}
Теги:
browser

1 ответ

0

Вам не нужен список условий if, вам просто нужно убедиться, что количество строк меньше вашего желаемого предела. Вы также должны хранить лимит за стол, чтобы избежать столкновения счетчика, если/когда добавлено больше таблиц.

Вот как я это сделаю:

(note: Это не будет работать "как есть" - я предположил, что вы удалили код для назначения tbl в cmdCreate_Click() и оставили его как есть для ясности)

namespace FormTest
{

public partial class About : Page
{

    private int myFirstTableMaxRows = 3;

    protected void Page_Load(object sender, System.EventArgs e)
    {
        tbl.BorderStyle = BorderStyle.Inset;
        tbl.BorderWidth = Unit.Pixel(1);

        if (!Page.IsPostBack)
        {
            Session["myFirstTable_count"] = "0";
        }
        else
        {
            int count = (int)Session["myFirstTable_count"];
            Session["myFirstTable_count"] = ++count;
        }
    }

    protected void cmdCreate_Click(object sender, System.EventArgs e)
    {
        tbl.Controls.Clear();

        int cols = 4;
        int currentRowCount = (int)Session["myFirstTable_count"];
        if(currentRowCount <= myFirstTableMaxRows)
        {
            TableRow rowNew = new TableRow();
            tbl.Controls.Add(rowNew);
            for (int j = 0; j < cols; j++)
            {
                TableCell cellNew = new TableCell();
                Label lblNew = new Label();
                lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";

                TextBox tbNew = new TextBox();
                cellNew.Controls.Add(lblNew);
                cellNew.Controls.Add(tbNew);

                rowNew.Controls.Add(cellNew);
            }
        }
        else
        {
            Response.Redirect("http://www.google.co.uk");
        }

    }//end cmdCreate_Click
}

Обновление после редактирования вопроса

Существующие строки будут связаны с этой строкой в коде:

tbl.Controls.Clear();

Таблица очищается, затем одна строка добавляется по логике в cmdCreate_Click().

  • 0
    Привет - спасибо за ответ, это та же проблема, что и код, который я разместил, мне нравится идея дополнительных сессий, но она не работает, вы пробовали этот код и можете подтвердить? Проехал несколько раз, но не понимаю, в чем проблема.
  • 0
    Я обновил вопрос, обнаружил проблему со строками, каждый раз, когда они генерируются при загрузке страницы. Таким образом, он никогда не проходит одну строку, так как он просто проходит за ноль, создавая одну строку для каждой нагрузки независимо от количества.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню