嵌套的Gridview页脚文本框必需的字段验证在嵌套的Gridview页脚按钮上的每一行触发单击

时间:2014-07-11 20:47:39

标签: c# asp.net

我正在尝试获取必要的字段验证,以便在单击添加按钮时仅为特定行触发。但是现在,当我单击任何添加按钮时,它会触发所有嵌套网格行的必需字段验证。嵌套网格视图的代码和网格视图的图像如下。我还尝试使用验证组,尝试为每个嵌套的gridview行获取唯一的验证组,但无法使其工作。

enter image description here

<asp:GridView ID="GrdXML" runat="server" AllowSorting="false"
    AutoGenerateColumns="False" CellPadding="0"
    ForeColor="#333333" GridLines="Horizontal" onrowdeleting="GrdXML_RowDeleting" OnRowDataBound="OnRowDataBound"
    ShowFooter="false" CssClass="xmlgrid" OnSorting="GrdXML_Sorting" DataKeyNames="ContractRecordID">
    <Columns>
        <asp:TemplateField HeaderText="Contract Start Date" SortExpression="ContractStartDate">
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text='<%# Bind("ContractStartDate") %>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="30%" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Contract End Date" SortExpression="ContractEndDate">
            <ItemTemplate>
                <asp:Label ID="Label3" runat="server" Text='<%# Bind("ContractEndDate") %>'></asp:Label>
            </ItemTemplate>
            <ItemStyle Width="50%" />
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="BtnDelete" runat="server" 
                    CommandArgument='<%# Eval("ContractRecordID") %>' CommandName="Delete" 
                    onclick="BtnDelete_Click" Text="Delete" Width="60px" />
                <ajaxToolkit:ConfirmButtonExtender ID="BtnDelete_ConfirmButtonExtender" 
                    runat="server" ConfirmText="Are you sure you want to Delete?" Enabled="True" 
                    TargetControlID="BtnDelete">
                </ajaxToolkit:ConfirmButtonExtender>
            </ItemTemplate>
            <ItemStyle Width="40px" />
        </asp:TemplateField>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Literal runat="server" ID="lit1" Text="<tr id='trGrid'><td colspan='100%'>" />
                <asp:GridView ID="projectCodeGridView" runat="server" AllowSorting="false" CellPadding="4" ForeColor="#333333" GridLines="Horizontal" AutoGenerateColumns="false" ShowFooter="true" OnRowCommand="ProjectCodeGridView_RowCommand" OnRowCreated="ProjectCodeGridView_RowCreated" OnRowDataBound="ProjectCodeGridView_RowDataBound" OnRowDeleting="ProjectCodeGridView_RowDeleting" DataKeyNames="ContractProjectCodeID" BorderStyle="None" BorderWidth="0">
                    <Columns>
                        <asp:TemplateField HeaderText="Project Codes" SortExpression="ContractProjectCode" HeaderStyle-HorizontalAlign="Left">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("ContractProjectCode") %>' CssClass="projectcodelabel"></asp:Label>
                            </ItemTemplate>
                            <ItemStyle Width="100%" />
                            <FooterTemplate>
                                <asp:TextBox ID="projectCodeTextBox" runat="server" ValidationGroup='<%# "PC" + Eval("ContractProjectCodeID") %>'></asp:TextBox>
                                <asp:RequiredFieldValidator ID="projectCodeRequiredFieldValidator" runat="server" 
            ControlToValidate="projectCodeTextBox" ErrorMessage="Project Code Required" ForeColor="Red" Display="Static" ValidationGroup='<%# "PC" + Eval("ContractProjectCodeID") %>' Enabled="false"></asp:RequiredFieldValidator>
                            </FooterTemplate>
                            <FooterStyle Width="100%" />
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:Button ID="BtnDelete1" runat="server" 
                    CommandArgument='<%# Eval("ContractProjectCodeID") %>' CommandName="Delete" 
                    onclick="BtnDelete1_Click" Text="Delete" Width="60px" />
                <ajaxToolkit:ConfirmButtonExtender ID="BtnDelete1_ConfirmButtonExtender" 
                    runat="server" ConfirmText="Are you sure you want to Delete?" Enabled="True" 
                    TargetControlID="BtnDelete1">
                </ajaxToolkit:ConfirmButtonExtender>
                            </ItemTemplate>
                            <FooterTemplate>
                                <asp:Button ID="BtnAdd" runat="server" onclick="BtnAdd_Click" Text="Add" Width="60px" ValidationGroup='<%# "PC" + Eval("ContractProjectCodeID") %>' CommandName="Add" />
                            </FooterTemplate>
                            <FooterStyle Width="100%" />
                        </asp:TemplateField>
                    </Columns>
                    <HeaderStyle BackColor="#F7F6F3" Font-Bold="True" />
                </asp:GridView>
                <asp:Literal runat="server" ID="lit2" Text="</td></tr>" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    <EditRowStyle BackColor="#999999" />
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="Black" CssClass="padding" />
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" HorizontalAlign="Center" CssClass="padding" />
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingHeaderStyle BackColor="#506C8C" />
    <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>

1 个答案:

答案 0 :(得分:0)

对于每行的验证控件,您要添加ValidationGroup ='&lt;%#“PC”+ Eval(“ContractProjectCodeID”)%&gt;'。正如您所说,验证触发错误的行,可能是ContractProjectCodeID对于每一行可能不是唯一的。我认为您可以做的是将行索引添加到验证组

ValidationGroup='<%# "PC" + Container.DataItemIndex + Eval("ContractProjectCodeID")