Pergunta

Eu tenho uma lista de itens em uma ordem para ser exibida no ASP.NET - cada item (linha) terá 3 caixas de texto para que o usuário possa visualizar e alterar esses dados (custo de envio, custo de manuseio, preço).

Qual seria uma maneira "recomendada" de conseguir isso? Com um repetidor, suponho que teria que percorrer os valores do formulário em postagem e, com um controle de gridview, eu teria que substituir o OnRowDatabound e no postback algum outro método.

Tenho certeza de que os dois funcionariam, mas o que você como desenvolvedor escolhe nesta situação?

Foi útil?

Solução

O que eu fiz no passado é usar o Gridview Templatecolumns, ligado a dados:

<asp:GridView runat="server" ID="grdRoster" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField HeaderText="First Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtFirstName" Columns="10" Text='<%# Eval("RosterFirstName") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Middle Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtMiddleName" Columns="10" Text='<%# Eval("RosterMiddleName") %>' />
            </ItemTemplate>
        </asp:TemplateField>                       
        <asp:TemplateField HeaderText="Last Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtLastName" Columns="10" Text='<%# Eval("RosterLastName") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Em seguida, no postback (digamos, um botão "salvar" clique em), você pode percorrer as linhas na Gridview e arrancar os valores das caixas de texto:

foreach ( GridViewRow row in grdRoster.Rows )
{
    if ( row.RowType == DataControlRowType.DataRow )
    {
        string firstName = ( ( TextBox ) row.FindControl( "txtRosterFirstName" ) ).Text;
        string middleName = ( ( TextBox ) row.FindControl( "txtRosterMiddleName" ) ).Text;
        string lastName = ( ( TextBox ) row.FindControl( "txtRosterLastName" ) ).Text;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top