• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mendex

Criar nomes de controlos dinamicamente

8 mensagens neste tópico

Olá,

pretendo criar uma lista de usercontrols dinamicamente e não um a um. Estou com um problema em dar o nome dinamicamente ao controlo.

<% for(int i=0; i<players.Length; i++) { %>
            <div class="box_dados_st_2">
              <uc:row[b] id="row<%=i%>"[/b] rownumber="<%=i%>" runat="server" />
            </div>
<% } %>

Dá-me o erro 'row<%=i%>' is not a valid identifier.

Alguém sabe como posso criar o nome dinamicamente?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes criar dessa forma. Experimenta algo assim:

for (int i = 0; i <= players.Lenght-1; i++)
            {
                // Cria o novo controlo
                CheckBox check = new CheckBox();
                check.ID = "row"+ i.ToString();
                check.Text = "xpto" + i.ToString();
                for (int j = 0; j <= checks.Count - 1; j++)
                {
                    if (checks[j].ToString() == check.ID)
                    {
                        check.Checked = true;
                    }
                }

                // Adicionar o controlo
                Page.Master.FindControl("ContentPlaceHolder1").FindControl("panelCategorias").Controls.Add(check);

            }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faço

Page.Master.FindControl("Form").FindControl("panelRows") e não encontro o painel que adicionei para este efeito.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Certo, era erro meu.

Os controlos já aparecem no painel.

Mas continuo sem lhes conseguir ler os valores quando clico no botão "Next".

Ceio que o problema tem a ver com passar por criar a página (o "Next" vai para a mesma página com mais um controlo, para preencher mais um registo) antes de passar no evento de click.

assim os controlos estão sempre com o Text vazio. Também já tentei usar um repeater e tenho o mesmo problema, consigo preencher os dados com a propriedades Items do repeater, mas quando faço next, no respectivo evento click, o Items já está vazio....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já tenho o poblema resolvido.

Já estou a preencher de maneira diferente do que estava... e deixei de usar um usercontrol como tinha, para usar mesmo os controlos.

aspx

<asp:repeater id="repeaterInviteds" runat="server" onitemdatabound="repeaterInviteds_ItemDataBound">
              <ItemTemplate>
                <table>
                  <caption></caption>
                  <tr>
                    <td width="70" align="right">
                      <asp:label id="lblRepeaterName" runat="server" />
                    </td>
                    <td>
                      <asp:textbox id="txtRepeaterName" type="text" runat="server" text='<%# Eval("name")%>' />
                    </td>
                  </tr>
                  <tr>
                    <td align="right">
                      <asp:label id="lblRepeaterClub" runat="server" />
                    </td>
                    <td>
                      <asp:textbox id="txtRepeaterClub" type="text" runat="server" text='<%# Eval("club")%>'/>
                    </td>
                  </tr>
                  <tr>
                    <td align="right">
                      <asp:label id="lblRepeaterHandicap" runat="server" />
                    </td>
                    <td>
                      <asp:textbox id="txtRepeaterHandicap" type="text" runat="server" text='<%# Eval("handicap")%>' />
                    </td>
                  </tr>
                </table>
              </ItemTemplate>
            </asp:repeater>

.cs

protected void repeaterInviteds_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item)
            {
                DataRowView data = (DataRowView)e.Item.DataItem;

                Label lblName = (Label)e.Item.FindControl("lblRepeaterName");
                lblName.Text = Resources.Resources.lblName;

                TextBox name = (TextBox)e.Item.FindControl("txtRepeaterName");
                name.Text = data["Name"].ToString();

                Label lblClub = (Label)e.Item.FindControl("lblRepeaterClub");
                lblClub.Text = Resources.Resources.lblHomeClub;

                TextBox club = (TextBox)e.Item.FindControl("txtRepeaterClub");
                club.Text = data["Club"].ToString();

                Label lblHandicap = (Label)e.Item.FindControl("lblRepeaterHandicap");
                lblHandicap.Text = Resources.Resources.lblHandicap;

                TextBox handicap = (TextBox)e.Item.FindControl("txtRepeaterHandicap");
                handicap.Text = data["Handicap"].ToString();
            }
        }

protected void GetPlayers()
        {
            repeaterInviteds.DataSource = dsPlayers;
            repeaterInviteds.DataBind();
        }

protected void SetPlayers(bool addOne)
        {
            Repeater rep = ((Repeater)Page.FindControl("form").FindControl("repeaterInviteds"));
            for (int i = 0; i < dsPlayers.Tables["Players"].Rows.Count; i++)
            {
                dsPlayers.Tables["Players"].Rows[i].ItemArray = new object[] {
                    ((TextBox)rep.Controls[i].FindControl("txtRepeaterName")).Text,
                    ((TextBox)rep.Controls[i].FindControl("txtRepeaterClub")).Text,
                    ((TextBox)rep.Controls[i].FindControl("txtRepeaterHandicap")).Text
                    };
            }

            if (addOne)
                dsPlayers.Tables["Players"].Rows.Add("", "", "");
        }

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                GetPlayers();
        }

Obrigado pelas ajudas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por tanto voute dar 1 exemplo de criar 10 textbox e adicionalas dinamicamente.

1º cria um panel.

2ºadiciona o codigo ;)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim x = 0
        For x = 0 To 10
            Dim a As New TextBox
            a.Text = "textbox numero " & x
            a.ID = x
            Panel1.Controls.Add(a)
        Next x
end sub

Facil ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora