在动态占位符C#

时间:2018-12-06 13:21:30

标签: c# dynamic-controls

我编写了使用占位符动态创建控件的代码。 该程序生成用于创建调查的简单表格。程序的结构分为两部分。第一部分动态创建许多包含PlaceHolders的控件。为了更好地理解,我添加了一些代码片段。

首先,我为ex创建了一些私人列表。

 private List<string> LabelsList
{
    get
    {
        if (ViewState["labels"] == null)
        {
            ViewState["labels"] = new List<string>();
        }

        return (List<string>)ViewState["labels"];
    }
}

在下一步中,我添加了int变量来检查例如列表上有多少个ID。

  private int LastIDLabels
{
    get
    {
        return LabelsList.Count;
    }
}

在第三步中,我编写了通用代码来加载ViewState,并为Buttons动作添加和删除了控件。

 protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);
}

protected override void LoadViewState(object savedState)
{
    base.LoadViewState(savedState);

    for (int i = 0; i < ControlsList.Count; i++)
    {
        Label InstrukcjaList = new Label();
        InstrukcjaList.ID = LabelsList[i];
        InstrukcjaList.Width = 200;
        InstrukcjaList.Height = 32;
        int b = i + 2;
        InstrukcjaList.Text = "Wprowadź treść pytania " + b;
        InstrukcjaList.CssClass = "labelTwo";
        InstrukcjaList.Style.Value = "color: white;";

        TextBox PytanieList = new TextBox();
        PytanieList.ID = ControlsList[i];
        PytanieList.Width = 350;
        PytanieList.Height = 28;
        PytanieList.Font.Size = 10;
        PytanieList.Style.Value = "margin-right: 5px;";

        Button DodajOdpList = new Button();
        DodajOdpList.ID = ListaDodaj[i];
        DodajOdpList.Width = 20;
        DodajOdpList.Height = 20;
        DodajOdpList.Font.Size = 7;
        DodajOdpList.Text = "+";
        DodajOdpList.ToolTip = "Dodaj odpowiedź do pytania";
        DodajOdpList.Style.Value = "background-color: green; color: white;";
        //DodajOdpList.Attributes.Add("OnClick", "DodajOdp_Click");

        Button UsunOdpList = new Button();
        UsunOdpList.ID = ListaUsun[i];
        UsunOdpList.Width = 20;
        UsunOdpList.Height = 20;
        UsunOdpList.Font.Size = 7;
        UsunOdpList.Text = "-";
        UsunOdpList.ToolTip = "Usuń odpowiedź";
        UsunOdpList.Style.Value = "background-color: red; color: white;";
        //UsunOdpList.Attributes.Add("OnClick", "UsunOdp_Click");

        PlaceHolder PHListOdp = new PlaceHolder();
        PHListOdp.ID = ListaPHOdp[i];

        PlaceHolder1.Controls.Add(InstrukcjaList);
        PlaceHolder1.Controls.Add(PytanieList);
        PlaceHolder1.Controls.Add(DodajOdpList);
        PlaceHolder1.Controls.Add(UsunOdpList);
        PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
        PlaceHolder1.Controls.Add(PHListOdp);
        PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));

        Label OdpowiedzList = new Label();
        OdpowiedzList.ID = ListaTrescOdp[i];
        OdpowiedzList.Width = 200;
        OdpowiedzList.Height = 32;
        OdpowiedzList.Text = "Wprowadź odpowiedź 1";
        OdpowiedzList.CssClass = "labelOne";
        OdpowiedzList.Style.Value = "margin-left: 50px;";

        TextBox WartoscOdpLista = new TextBox();
        WartoscOdpLista.ID = ListaWartoscOdp[i];
        WartoscOdpLista.Width = 350;
        WartoscOdpLista.Height = 28;
        WartoscOdpLista.Font.Size = 10;
        WartoscOdpLista.Style.Value = "margin-right: 5px;";

        CheckBox CheckBoxLista = new CheckBox();
        CheckBoxLista.ID = ListaCheckOdp[i];
        CheckBoxLista.ToolTip = "Zaznacz jeżeli prawidłowa odpowiedź";
        /*PlaceHolder PHNewID = new PlaceHolder();
        PHNewID.ID = "PH" + i;
        PHNewID.Controls.Add(OdpowiedzList);*/

        PHListOdp.Controls.Add(OdpowiedzList);
        PHListOdp.Controls.Add(WartoscOdpLista);
        PHListOdp.Controls.Add(CheckBoxLista);

    }
}
protected void Button3_Click(object sender, EventArgs e)
{

    Label InstrukcjaList = new Label();
    InstrukcjaList.ID = "Instrukcja" + NextID.ToString();
    InstrukcjaList.Width = 200;
    InstrukcjaList.Height = 32;
    int c = NextID + 1;
    InstrukcjaList.Text = "Wprowadź treść pytania " + c.ToString();
    InstrukcjaList.CssClass = "labelTwo";
    InstrukcjaList.Style.Value = "color: white;";
    LabelsList.Add(InstrukcjaList.ID);

    TextBox PytanieList = new TextBox();
    PytanieList.ID = "Pytanie" + NextID.ToString();
    PytanieList.Width = 350;
    PytanieList.Height = 28;
    PytanieList.Font.Size = 10;
    PytanieList.Style.Value = "margin-right: 5px;";

    Button DodajOdpList = new Button();
    DodajOdpList.ID = "DodajOdp" + NextID.ToString();
    DodajOdpList.Width = 20;
    DodajOdpList.Height = 20;
    DodajOdpList.Font.Size = 7;
    DodajOdpList.Text = "+";
    DodajOdpList.ToolTip = "Dodaj odpowiedź do pytania";
    DodajOdpList.Style.Value = "background-color: green; color: white;";
    DodajOdpList.Click += new EventHandler(DodajOdp_Click);
    ListaDodaj.Add(DodajOdpList.ID);

    Button UsunOdpList = new Button();
    UsunOdpList.ID = "UsunOdp" + NextID.ToString();
    UsunOdpList.Width = 20;
    UsunOdpList.Height = 20;
    UsunOdpList.Font.Size = 7;
    UsunOdpList.Text = "-";
    UsunOdpList.ToolTip = "Usuń odpowiedź";
    UsunOdpList.Style.Value = "background-color: red; color: white;";
    UsunOdpList.Click += new EventHandler(UsunOdp_Click);
    ListaUsun.Add(UsunOdpList.ID);



    PlaceHolder PHListOdp = new PlaceHolder();
    PHListOdp.ID = "PH" + NextID.ToString();
    ListaPHOdp.Add(PHListOdp.ID);

    PlaceHolder1.Controls.Add(InstrukcjaList);
    PlaceHolder1.Controls.Add(PytanieList);
    PlaceHolder1.Controls.Add(DodajOdpList);
    PlaceHolder1.Controls.Add(UsunOdpList);
    PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
    PlaceHolder1.Controls.Add(PHListOdp);
    PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
    ControlsList.Add(PytanieList.ID);

    Label OdpowiedzList = new Label();
    OdpowiedzList.ID = "PH" + LastIDPH.ToString() + "L0";
    OdpowiedzList.Width = 200;
    OdpowiedzList.Height = 32;
    OdpowiedzList.Text = "Wprowadź odpowiedź 1";
    OdpowiedzList.CssClass = "labelOne";
    OdpowiedzList.Style.Value = "margin-left: 50px;";
    ListaTrescOdp.Add(OdpowiedzList.ID);

    TextBox WartoscOdpLista = new TextBox();
    WartoscOdpLista.ID = "PH" + LastIDPH.ToString() + "TB0";
    WartoscOdpLista.Width = 350;
    WartoscOdpLista.Height = 28;
    WartoscOdpLista.Font.Size = 10;
    WartoscOdpLista.Style.Value = "margin-right: 5px;";
    ListaWartoscOdp.Add(WartoscOdpLista.ID);

    CheckBox CheckBoxLista = new CheckBox();
    CheckBoxLista.ID = "PH" + LastIDPH.ToString() + "CB0";
    CheckBoxLista.ToolTip = "Zaznacz jeżeli prawidłowa odpowiedź";
    ListaCheckOdp.Add(CheckBoxLista.ID);

    PHListOdp.Controls.Add(OdpowiedzList);
    PHListOdp.Controls.Add(WartoscOdpLista);
    PHListOdp.Controls.Add(CheckBoxLista);
}

protected void Button4_Click(object sender, EventArgs e)
{
    ListaCheckOdp.Remove("PH" + LastIDPH.ToString() + "CB0");
    ListaWartoscOdp.Remove("PH" + LastIDPH.ToString() + "TB0");
    ListaTrescOdp.Remove("PH" + LastIDPH.ToString() + "L0");
    PlaceHolder1.Controls.Remove(new LiteralControl("<br/>"));
    ListaPHOdp.Remove("PH" + LastIDPH.ToString());
    PlaceHolder1.Controls.Remove(new LiteralControl("<br/>"));
    ListaDodaj.Remove("DodajOdp" + LastIDDodajOdpButton.ToString());
    ListaUsun.Remove("UsunOdp" + LastIDUsunOdpButton.ToString());
    ControlsList.Remove("Pytanie" + LastID.ToString());
    LabelsList.Remove("Instrukcja" + LastIDLabels.ToString());
}

我知道代码不太好,但是我是一名新手C#程序员。此代码完美地工作。不幸的是,我对代码的第二部分有很多疑问。

当我从Button3_Click诱导操作时,我会得到带有
的表单 标签,文本框,两个按钮,PlaceHolder,标签,文本框和复选框。

这些中最重要的控件是PlaceHolder,AddAnswer和DeleteAnswer按钮。

AddAnswer对象看起来像这样

  protected void DodajOdp_Click(object sender, EventArgs e)
{
    Button btnDO = (Button)sender;
    string id = btnDO.ID;

    for (int i = 0; i <= ListaPHOdp.Count; i++)
    {
        if (id == "DodajOdp" + i.ToString())
        {

            Label OdpowiedzList = new Label();
            OdpowiedzList.ID = "PH" + i.ToString() + "L1"; //+ OstatnieIDInstrukcjiOdpowiedzi.ToString();
            OdpowiedzList.ID = "PH0L1";
            OdpowiedzList.Width = 200;
            OdpowiedzList.Height = 32;
            OdpowiedzList.Text = "Wprowadź odpowiedź ";// + OstatnieIDInstrukcjiOdpowiedzi.ToString();
            OdpowiedzList.CssClass = "labelOne";
            OdpowiedzList.Style.Value = "margin-left: 50px;";
            ListaOdpowiedzidlaPytania.Add(OdpowiedzList.ID);

            PH0.Controls.Add(OdpowiedzList);
        }
    }
}

几乎可以使用,但是在这种情况下,仅对于一个PlaceHolder ID为PH0。我知道我在代码中添加了此代码,但是我尝试了许多解决方案来对其进行更改。

第一个问题是。如何更改这段代码PH0.Controls.Add(OdpowiedzList);获取ID取决于按钮ID?

第二个问题是。如何将DodajOdp_Click对象添加到ID从“ DodajOdp”开始的所有新按钮中?

我希望对您来说很清楚。也许有人可以帮助我。

0 个答案:

没有答案