FindControl () возвращает ноль при поиске динамического элемента управления - PullRequest
0 голосов
/ 04 мая 2018

В моем требовании я создаю динамические элементы управления двумя событиями

  1. выпадающий список OnSelectedIndexChanged событие
  2. Событие нажатия кнопки

В событии OnSelectedIndexChanged я создал номер динамического текстового поля.

Здесь я создал два динамических текстовых поля. enter image description here

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

enter image description here

Все являются динамическими элементами управления

При сохранении списка товаров флажок управления возвращает нулевое значение

  protected void ddlenqChaged(object sender, EventArgs e)
    {
        getenqTextbox();
    }
    protected void btnSearchClick(object sender, EventArgs e)
    {
        tblbill.Visible = true;

        if (Convert.ToString(ViewState["Generated"]) != "true")
        {
            CreateDynamicControls();
            ViewState["Generated"] = "true";
        }
    }


protected void getenqTextbox()
    {
        enqPanel.Controls.Clear();
        if (Convert.ToInt32(ddlNoofEnq.SelectedValue) > 0)
        {
            for (int i = 1; i <= Convert.ToInt32(ddlNoofEnq.SelectedValue); i++)
            {
                TextBox _txtCode = new TextBox();
                _txtCode.ID = "txtEnqqNo" + i;
                _txtCode.Attributes.Add("ClientIDMode", "Static");
                _txtCode.Width = 75;
                _txtCode.CssClass = "AtCompleteByEnq";
                enqPanel.Controls.Add(_txtCode);
            }
        }
    }


protected void CreateDynamicControls()
    {

        int m = 1;
        //int encount = click.buttonclick;

        if (Convert.ToInt32(ddlNoofEnq.SelectedValue) > 0)
        {
            Table tbldynamic = new Table();

            for (int k = 1; k <= Convert.ToInt32(ddlNoofEnq.SelectedValue); k++)
            {
                Panel1.Controls.Clear();
                TextBox tb = (TextBox)enqPanel.FindControl("txtEnqqNo" + k);
                if (tb != null)
                {
                    if (!String.IsNullOrEmpty(tb.Text))
                    {
                        List<Enquiry_ProductListBLL> objlst = Enquiry_ProductListBLL.GetEnquiry_ProductListBLLs(tb.Text);

                        foreach (Enquiry_ProductListBLL item in objlst)
                        {
                            TableRow tr = new TableRow();

                            TableCell tc = new TableCell();
                            TableCell tc1 = new TableCell();
                            TableCell tc2 = new TableCell();
                            TableCell tc3 = new TableCell();
                            TableCell tc4 = new TableCell();
                            TableCell tc5 = new TableCell();

                            TableCell tc6 = new TableCell();

                            Master_ProductBLL objpdt = Master_ProductBLL.GetMaster_ProductBLL(item.ProductId);

                            CheckBox _chkRowNo = new CheckBox();
                            _chkRowNo.ID = "chkRowNo" + m;
                            _chkRowNo.Text = m.ToString();
                            _chkRowNo.Attributes.Add("ClientIDMode", "Static");
                            _chkRowNo.Attributes.Add("onclick", "getEnable(this);");
                            _chkRowNo.Checked = true;

                            TextBox _txtCode = new TextBox();
                            _txtCode.ID = "txtCodeRow" + m;
                            _txtCode.Attributes.Add("ClientIDMode", "Static");
                            _txtCode.Enabled = false;
                            _txtCode.Width = 75;
                            _txtCode.Attributes.Add("autocomplete", "off");
                            _txtCode.Text = objpdt.Code;

                            HiddenField _hdnPdtId = new HiddenField();
                            _hdnPdtId.ID = "hdnPdtId" + m;
                            _hdnPdtId.Value = item.ProductId.ToString();

                            HiddenField _hdEnqNo = new HiddenField();
                            _hdEnqNo.ID = "hdEnqNo" + m;
                            _hdEnqNo.Value = item.EnqNo;

                            _hdnPdtId.Value = item.ProductId.ToString();
                            TextBox _txtPdtName = new TextBox();
                            _txtPdtName.ID = "txtPdtNameRow" + m;
                            _txtPdtName.Attributes.Add("ClientIDMode", "Static");
                            _txtPdtName.Enabled = false;
                            _txtPdtName.Width = 150;
                            _txtPdtName.CssClass = "AtCompleteByName";
                            _txtPdtName.Text = objpdt.Name;


                            TextBox _txtQty = new TextBox();
                            _txtQty.ID = "txtQtyRow" + m;
                            _txtQty.Width = 80;
                            _txtQty.MaxLength = 8;
                            _txtQty.Attributes.Add("ClientIDMode", "Static");
                            //_txtQty.Attributes.Add("onblur", "GetTotal(this)");
                            //_txtQty.Enabled = false;
                            _txtQty.Text = item.Count.ToString();

                            DropDownList ddlUnits = new DropDownList();
                            ddlUnits.ID = "ddlUnits" + m;
                            ddlUnits.CssClass = "dropdowncss";
                            ddlUnits.Width = 100;
                            Bindings.BindUnitName(ddlUnits);
                            ddlUnits.Items.FindByText(item.PP).Selected = true;

                            tc.Controls.Add(_chkRowNo);
                            tc1.Controls.Add(_txtCode);
                            tc2.Controls.Add(_txtPdtName);
                            tc2.Controls.Add(_hdnPdtId);
                            tc2.Controls.Add(_hdEnqNo);
                            tc3.Controls.Add(_txtBrand);
                            tc4.Controls.Add(_txtThickness);
                            tc5.Controls.Add(ddlUnits);
                            tc6.Controls.Add(_txtQty);

                            tc.Attributes.Add("Width", "50px");
                            tr.Attributes.Add("id", "Rowid" + m);
                            tr.Attributes.Add("class", "paidRw");

                            tr.Cells.Add(tc);
                            tr.Cells.Add(tc1);
                            tr.Cells.Add(tc2);
                            tr.Cells.Add(tc3);
                            tr.Cells.Add(tc4);
                            tr.Cells.Add(tc5);
                            tr.Cells.Add(tc6);


                            tbldynamic.Rows.Add(tr);
                            m++;
                        }
                    }
                }
            }

            Panel1.Controls.Add(tbldynamic);
        }
    }

Здесь я переопределил событие OnLoad

 protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        CreateDynamicControls();
        getenqTextbox();

    }

Моя проблема в том, что я не могу найти элементы управления из Panel1

CheckBox chk = (CheckBox)Panel1.FindControl(chkId);
                    if (chk != null)
                    {
                        if (chk.Checked == true)
                        {
                            //my process
                        }
                    }

FindControl возвращает нулевое значение.

Здесь я дважды создавал динамические элементы управления.

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

1 Ответ

0 голосов
/ 04 мая 2018

FindControl не обходит иерархию. См. Документ Control.FindControl ()

Этот метод найдет элемент управления, только если элемент управления непосредственно содержится в указанном контейнере; то есть метод не выполняет поиск по всей иерархии элементов управления внутри элементов управления.

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

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