Потеря данных последнего пользовательского элемента управления при удалении пользовательского элемента управления - PullRequest
0 голосов
/ 04 июня 2019

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

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

Большое спасибо заранее

List<User_controls> ctrl = new List<User_controls>();

protected void Page_Load(object sender, EventArgs e)
{
    Session["userid"] = 3;
    CreateControls();
}

protected void CreateControls()
{
    if (!IsPostBack)
    {
        if (ViewState["totalcount"] == null)
        {
            ViewState["oldcount"] = ViewState["totalcount"] = 1;
        }
    }
    for (int i = 0; i < (int)ViewState["totalcount"]; i++)
    {
        ctrl.Add((User_controls)LoadControl("~/User/controls.ascx"));
        int index = ctrl.Count - 1;
        pnl.Controls.Add(ctrl[index]);
        ctrl[index].ID = "ctrl " + index;
        ctrl[index].ehclick += new EventHandler(this.Btncancel_Click);
    }
}

protected void btnadd_Click(object sender, EventArgs e)
{
    int count = 0;
    if (ViewState["newcount"] != null)
        count = (int)ViewState["newcount"];
    count++;
    ViewState["newcount"] = count;
    ViewState["totalcount"] = (int)ViewState["newcount"] + (int)ViewState["oldcount"];
    ctrl.Add((User_controls)LoadControl("~/User/controls.ascx"));
    pnl.Controls.Add(ctrl[ctrl.Count() - 1]);
    ctrl[ctrl.Count() - 1].ID = "ctrl " + (ctrl.Count() - 1);
    ctrl[ctrl.Count() - 1].ehclick += new EventHandler(this.Btncancel_Click);
}

protected void Btncancel_Click(object sender, EventArgs e)
{
    User_controls rmctrl = (User_controls)sender;
    int index = ctrl.IndexOf(rmctrl);
    pnl.Controls.Remove(ctrl[index]);
    ctrl.RemoveAt(index);
    if (index < (int)ViewState["oldcount"])
    {
        ViewState["oldcount"] = (int)ViewState["oldcount"] - 1;
    }
    else
        ViewState["newcount"] = (int)ViewState["newcount"] - 1;
    if (ViewState["newcount"] != null)
    {
        ViewState["totalcount"] = (int)ViewState["newcount"] + (int)ViewState["oldcount"];
    }
    else
        ViewState["totalcount"] = (int)ViewState["oldcount"];

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