数据网格中的绑定验证控件

时间:2012-02-15 18:45:31

标签: asp.net vb.net web-controls

我有以下数据网格:

<asp:DataGrid runat="server" ID="gastosReembolsables" ShowFooter="True" AutoGenerateColumns="False">
        <AlternatingItemStyle CssClass="DATAitem2"></AlternatingItemStyle>
        <ItemStyle CssClass="DATAitem1"></ItemStyle>
        <HeaderStyle CssClass="DATAheader"></HeaderStyle>
        <FooterStyle CssClass="DATAitem1"></FooterStyle>
        <Columns>
            <asp:TemplateColumn runat="server" HeaderText="Item">
                <ItemTemplate>
                    <asp:Label ID="Item" runat="server" Text='<%# Eval("item") %>'></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox runat="server" ID="Item" Width="40px" />
                </FooterTemplate>
            </asp:TemplateColumn>
            <asp:TemplateColumn runat="server" HeaderText="Precio">
                <ItemTemplate>
                    <asp:Label runat="server" ID="precio" Width="40px" Text='<%# Eval("precio") %>'></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox runat="server" Width="40px" ID="precio"></asp:TextBox>
                </FooterTemplate>
            </asp:TemplateColumn>
            <asp:TemplateColumn runat="server" HeaderText="Cantidad">
                <ItemTemplate>
                    <asp:TextBox ID="cantidad" Width="40px" runat="server" Text='<%# Eval("cantidad") %>' />
                    <asp:DropDownList runat="server" ID="unidadMedida" DataValueField='id' DataTextField="nombre"></asp:DropDownList>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="cantidad" Width="40px" runat="server"></asp:TextBox>
                    <asp:DropDownList runat="server" ID="unidadMedida" DataValueField='id' DataTextField="nombre"></asp:DropDownList>
                </FooterTemplate>
            </asp:TemplateColumn>
            <asp:BoundColumn runat="server" HeaderText="Total" DataField="total" />
            <asp:BoundColumn runat="server" Visible="False" DataField="id" />
            <asp:TemplateColumn runat="server">
                <ItemTemplate>
                    <asp:ImageButton ID="actualizarGasto" runat="server" CommandName="Update" ImageUrl="../../imagenes/btn_guardar.gif"
                        CausesValidation="True" ValidationGroup="item" />
                    <asp:ImageButton ID="eliminarGasto" runat="server" CommandName="Delete" ImageUrl="../../imagenes/btn_eliminar.gif"
                        CausesValidation="False" ValidationGroup="item" />
                </ItemTemplate>
                <FooterTemplate>
                    <asp:ImageButton ID="agregarGasto" runat="server" CommandName="New" ImageUrl="../../imagenes/agregar.png"
                        CausesValidation="True" ValidationGroup="footer" />
                </FooterTemplate>
            </asp:TemplateColumn>
            <asp:TemplateColumn runat="server" Visible="True">
                <ItemTemplate>
                    <asp:RequiredFieldValidator ID="validaCantidad" runat="server" 
                        ControlToValidate="cantidad" ValidationGroup='item<%# Eval("id") %>' ErrorMessage="Ingrese una Cantidad" Display="Dynamic"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="validaCantidadNumerico" Display="Dynamic" runat="server" 
                        ControlToValidate="cantidad" ValidationGroup='item<%# Eval("id") %>' ErrorMessage="La cantidad debe ser num&eacute;rica" 
                        Operator="DataTypeCheck" Type="Integer"></asp:CompareValidator>
                    <asp:CompareValidator ID="validaUnidadMedida" runat="server" 
                        ControlToValidate="unidadMedida" ValidationGroup='item<%# Eval("id") %>' ErrorMessage="Seleccione una unidad de medida" Display="Dynamic" Operator="NotEqual" ValueToCompare="0"></asp:CompareValidator>
                    <asp:ValidationSummary ID="resumenGastosReembolsablesItem" runat="server" ShowMessageBox="True" ShowSummary="false" ValidationGroup='item<%# Eval("id") %>' />
                </ItemTemplate>
                <FooterTemplate>
                    <asp:RequiredFieldValidator ID="validaCantidad" runat="server" 
                        ControlToValidate="cantidad" ErrorMessage="Ingrese una Cantidad" Display="None" ValidationGroup="footer"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="validaCantidadNumerico" runat="server" 
                        ControlToValidate="cantidad" Display="Dynamic" ErrorMessage="La cantidad debe ser num&eacute;rica" 
                        Operator="DataTypeCheck" Type="Integer" ValidationGroup="footer"></asp:CompareValidator>
                    <asp:CompareValidator ID="validaUnidadMedida" runat="server" 
                        ControlToValidate="unidadMedida" ErrorMessage="Seleccione una unidad de medida" Display="Dynamic" ValidationGroup="footer" Operator="NotEqual" ValueToCompare="0"></asp:CompareValidator>
                    <asp:RequiredFieldValidator ID="validaItem" runat="server" 
                        ControlToValidate="Item" ErrorMessage="Ingrese un Item" Display="Dynamic" ValidationGroup="footer"></asp:RequiredFieldValidator>
                    <asp:RequiredFieldValidator ID="validaPrecio" runat="server" 
                        ControlToValidate="precio" ErrorMessage="Ingrese un precio" Display="Dynamic" ValidationGroup="footer"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="validaPrecioNumerico" runat="server" 
                        ControlToValidate="precio" ErrorMessage="El precio debe ser num&eacute;rico" 
                        Operator="DataTypeCheck" Type="Double" Display="Dynamic" ValidationGroup="footer"></asp:CompareValidator>
                    <asp:ValidationSummary ID="resumenGastosReembolsablesFooter" runat="server" ShowMessageBox="True" ShowSummary="False" ValidationGroup="footer" />
                </FooterTemplate>
            </asp:TemplateColumn>
        </Columns>
    </asp:DataGrid>

除最后一列的itemtemplate的验证控件中的所有绑定外,所有绑定都有效(它们作为文本传递到网页)。

为什么会这样?我甚至可以做我想做的事情吗?

1 个答案:

答案 0 :(得分:1)

您只能使用<%# ... %>语法指定属性的整个值,而不是部分值。

更改

ValidationGroup='item<%# Eval("id") %>'

ValidationGroup='<%# "item" & Eval("id") %>'