在嵌套网格视图中唯一标识控件以进行验证

时间:2015-04-14 18:47:28

标签: c# asp.net gridview

我有一个嵌套网格。我想在用户添加记录时验证子网格中的下拉控件。但在嵌套网格中,控件ID不是唯一的。如果在每个父级下有2个父行和嵌套网格,则子网格控件将具有相同的ID。当我验证时,验证是检查所有嵌套网格,而不仅仅是我想要添加的网格。

这是标记:

 <asp:GridView ID="GroupGridView" runat="server" AutoGenerateColumns="False" 
            Caption="Group Information" CaptionAlign="Top" CssClass="grid" 
            ShowFooter="true" DataKeyNames="GroupID">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <a href="javascript:DivExpandCollapse('div<%# Eval("GroupID")%>');">
                        <img id="imgdiv<%# Eval("GroupID")%>" width="25px" border="0" src="Images/plus.png" /> </a> 
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="GroupID">
                    <ItemTemplate>
                        <asp:Label ID="uggvLblGroupID" runat="server" Text='<%# Bind("GroupID") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Group Name">
                    <ItemTemplate>
                        <asp:Label ID="uggvLblGroupName" runat="server" Text='<%# Bind("GroupName") %>'></asp:Label>
                    </ItemTemplate>    
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Action" ItemStyle-Wrap="false" ItemStyle-HorizontalAlign="Center">
                    <ItemTemplate>
                        <asp:Button ID="uggvDeleteButton" runat="server" CausesValidation="False" CommandName="Delete" 
                                        Text="Delete" CssClass="gridActionbutton"  OnClientClick="return confirm('Are you sure you want to delete this Group Information?')" >
                        </asp:Button>
                        <tr><td colspan="100%">  
                        <div id="div<%# Eval("GroupID") %>" style="display:none">
                            <asp:GridView ID="GroupMemberGridView" runat="server" AutoGenerateColumns="false" 
                                  CssClass="grid" ShowFooter="true">
                                <Columns>
                                    <asp:TemplateField HeaderText="MemberID">
                                        <ItemTemplate>
                                            <asp:Label ID="mggvLblMemberID" runat="server" Text='<%# Bind("MemberID") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Member Name" ItemStyle-Wrap="false"> 
                                        <ItemTemplate>
                                            <asp:Label ID="mggvLblMemberName" runat="server" Text='<%# Bind("MemberName") %>'></asp:Label>
                                        </ItemTemplate>               
                                        <FooterTemplate>
                                            <asp:DropDownList ID="mggvDDLMemberName" runat="server" ClientIDMode="Static" 
                                               class="chosen-single" data-placeholder="Choose member…">
                                            </asp:DropDownList>
                                            <asp:RequiredFieldValidator ID="ReqValueDDLMemberInsert" runat="server" InitialValue="0" 
                                                   ControlToValidate="mggvDDLMemberName" ValidationGroup="'<%# "InsertGroupMemberValidation_" + Eval("GroupID") %>' 
                                                    ErrorMessage="Selection required." CssClass="message-error-dropdown">
                                            </asp:RequiredFieldValidator>                                       
                                        </FooterTemplate>
                                    </asp:TemplateField>                                
                                    <asp:TemplateField HeaderText="Action" ItemStyle-Wrap="false" ItemStyle-HorizontalAlign="Center">                           
                                        <FooterTemplate>
                                            <asp:Button ID="mggvAddButton" runat="server" CommandName="Add" Text="Add Member" Width="90%"  
                                                CssClass="gridActionbutton" ValidationGroup='<%# "InsertGroupMemberValidation_" + Eval("GroupID") %>'> CausesValidation="true">
                                            </asp:Button>
                                        </FooterTemplate>
                                    </asp:TemplateField>
                                </Columns>
                            </asp:GridView>
                        </div>
                    </ItemTemplate>             
                    <FooterTemplate>
                        <asp:Button ID="uggvAddButton" runat="server" CommandName="Add" Text="Add Group" Width="90%" CausesValidation="true" 
                                        CssClass="gridActionbutton" ValidationGroup="InsertGroupNameValidation"
                        </asp:Button>
                    </FooterTemplate>
                    </asp:TemplateField>
            </Columns>
        </asp:GridView>

无论我点击哪个“添加成员”按钮,都会触发所有嵌套网格的验证,因为验证组不是唯一的。

如何为每个嵌套网格唯一标识ValidationGroup?

感谢。

更新 将成员添加到第一个嵌套组但不添加到后续嵌套网格时,ValidationGroup标识符起作用。它似乎仍然通过所有嵌套网格,而不仅仅是你点击的“添加”按钮中的网格。

1 个答案:

答案 0 :(得分:0)

//Access Validators and Buttons
        RequiredFieldValidator RequiredFieldValidator1 = (RequiredFieldValidator)e.Row.FindControl("RequiredFieldValidator1");
        RequiredFieldValidator RequiredFieldValidator2 = (RequiredFieldValidator)e.Row.FindControl("RequiredFieldValidator2");
        RequiredFieldValidator RequiredFieldValidator3 = (RequiredFieldValidator)e.Row.FindControl("RequiredFieldValidator3");
        Button Button = (Button)e.Row.FindControl("Button1");

        //Assign validation group to controls.
        RequiredFieldValidator1.ValidationGroup = "Gridview1" + e.Row.RowIndex.ToString();
        RequiredFieldValidator2.ValidationGroup = "Gridview1" + e.Row.RowIndex.ToString();
        RequiredFieldValidator3.ValidationGroup = "Gridview1" + e.Row.RowIndex.ToString();
        Button.ValidationGroup = "Gridview1" + e.Row.RowIndex.ToString();