Pregunta

Tengo una lista de artículos en un orden para mostrar en asp.net: cada artículo (fila) tendrá 3 cuadros de texto para que el usuario pueda ver y cambiar ese dato (costo de envío, costo de manejo, precio).

¿Cuál sería uno " recomendado " manera de lograr esto? Con un repetidor, supongo que luego tendría que recorrer los valores del formulario en la devolución de datos, y con un control de vista de cuadrícula tendría que anular onrowdatabound y en Postback algún otro método.

Estoy seguro de que ambos funcionarían, pero ¿qué eligen USTED como desarrollador en esta situación?

¿Fue útil?

Solución

Lo que he hecho en el pasado es usar columnas de plantilla GridView vinculadas a datos:

<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>

Luego, en la devolución (por ejemplo, un clic en el botón "Guardar"), puede recorrer las filas en el GridView y extraer los valores de los cuadros 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top