为某些列添加过滤器到Gridview标头

时间:2014-05-22 14:08:26

标签: asp.net gridview filtering daterangepicker

我有一个Gridview,其中列标题已合并行和列,并对某些列进行排序。我必须为11列中的6列添加过滤。其中两列只是文本过滤,其他4列是日期,需要搜索日期范围。

我发现我可以在列中添加HeaderTemplate,并在至少需要搜索的文本列中包含一个文本框。我将其添加到其中一列,文本框没有出现。这个列必须合并2行,我添加了一个LinkBut​​ton进行排序。我不知道这是一种好的方法还是可能的。最后,我不知道如何使用此方法来处理日期范围。我不知道是否可以将2 textboxes放在一个列中的标题模板中,或者是否有更好的方法。

这是我目前的Gridview:

 <asp:GridView ID="SectionGridView" runat="server" AllowSorting="True" AutoGenerateColumns="False" Caption="Section Information" CaptionAlign="Top" 
    CssClass="grid" HorizontalAlign="Left" ShowFooter="True" AllowPaging="True" PageSize="4" ShowHeaderWhenEmpty="true" 
    OnPageIndexChanging="SectionGridView_PageIndexChanging" OnRowDataBound="SectionGridView_RowDataBound" OnRowCommand="SectionGridView_RowCommand" 
    OnRowCancelingEdit="SectionGridView_RowCancelingEdit" OnRowEditing="SectionGridView_RowEditing" OnRowUpdating="SectionGridView_RowUpdating" 
    OnRowDeleting="SectionGridView_RowDeleting" OnRowCreated="SectionGridView_RowCreated" OnSorting="SectionGridView_Sorting">
    <Columns>
         <asp:TemplateField HeaderText="SectionID" SortExpression="SectionID" >
            <ItemTemplate>
                <asp:Label ID="sgvLblSectionID" runat="server" Text='<%# Bind("SectionID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="CourseID" ControlStyle-Width="20px">
            <EditItemTemplate>
                <asp:DropDownList ID="sgvDdlCourseID" runat="server" ></asp:DropDownList>
                <asp:Label ID="sgvEditLblCourseID" runat="server" Visible="false" Text='<%# Bind("CourseID") %>'></asp:Label>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblCourseID" runat="server" Text='<%# Bind("CourseID") %>'></asp:Label>
            </ItemTemplate>
             <FooterTemplate>
                <asp:TextBox ID="sgvInsertCourseID" runat="server" ReadOnly="true" Width="90%"></asp:TextBox>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Name" SortExpression="Name">
            <HeaderTemplate>
                <asp:TextBox runat="server" ID="txtBoxNameFilter" AutoPostBack="true" OnTextChanged="txtBoxNameFilter_TextChanged">

                </asp:TextBox>
            </HeaderTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="sgvEditName" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="ReqFieldValEditName" ControlToValidate="sgvEditName" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="EditSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValEditName" ControlToValidate="sgvEditName" runat="server" 
                     ErrorMessage="Maximum length is 255." ValidationGroup="EditSectionValidation" ValidationExpression="^.{1,255}$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblName" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="sgvInsertName" runat="server" Width="90%"></asp:TextBox>
                <asp:RequiredFieldValidator ID="ReqFieldValInsertName" ControlToValidate="sgvInsertName" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="InsertSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValInsertName" ControlToValidate="sgvInsertName" runat="server" 
                     ErrorMessage="Maximum length is 255." ValidationGroup="InsertSectionValidation" ValidationExpression="^.{1,255}$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </FooterTemplate>
            <HeaderStyle ForeColor="Black" />
        </asp:TemplateField>
        <asp:TemplateField HeaderText="SKU" SortExpression="SKU">
            <EditItemTemplate>
                <asp:TextBox ID="sgvEditSKU" runat="server" Text='<%# Bind("SKU") %>'></asp:TextBox>
                 <asp:RequiredFieldValidator ID="ReqFieldValEditSKU" ControlToValidate="sgvEditSKU" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="EditSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValEditSKU" ControlToValidate="sgvEditSKU" runat="server" 
                     ErrorMessage="Enter alphanumeric, hyphen, or forward slash. Maximum length is 100." ValidationGroup="EditSectionValidation" ValidationExpression="^[\w-/]{1,100}$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblSKU" runat="server" Text='<%# Bind("SKU") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="sgvInsertSKU" runat="server" Width="90%"></asp:TextBox>
                 <asp:RequiredFieldValidator ID="ReqFieldValInsertSKU" ControlToValidate="sgvInsertSKU" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="InsertSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValInsertSKU" ControlToValidate="sgvInsertSKU" runat="server" 
                     ErrorMessage="Enter alphanumeric, hyphen, or forward slash. Maximum length is 100." ValidationGroup="InsertSectionValidation" ValidationExpression="^[\w-/]{1,100}$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </FooterTemplate>
            <HeaderStyle ForeColor="Black" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Open Date" SortExpression="RegistrationOpen">
            <EditItemTemplate>
                <asp:TextBox ID="sgvEditRegOpenDate" runat="server" CssClass="datepick" Text='<%# Bind("RegistrationOpen", "{0:MM-dd-yyyy}") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblRegOpenDate" runat="server" Text='<%# Bind("RegistrationOpen", "{0:MM-dd-yyyy}") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="sgvInsertRegOpenDate" runat="server" CssClass="datepick" Width="90%" ></asp:TextBox>
            </FooterTemplate>
            <HeaderStyle ForeColor="Black" />
        </asp:TemplateField>

         <asp:TemplateField HeaderText="Close Date" SortExpression="RegistrationClose">
            <EditItemTemplate>
                <asp:TextBox ID="sgvEditRegCloseDate" runat="server" CssClass="datepick" Text='<%# Bind("RegistrationClose", "{0:MM-dd-yyyy}") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblRegCloseDate" runat="server" Text='<%# Bind("RegistrationClose", "{0:MM-dd-yyyy}") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="sgvInsertRegCloseDate" runat="server" CssClass="datepick" Width="90%"></asp:TextBox>
            </FooterTemplate>
            <HeaderStyle ForeColor="Black" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Start Date" SortExpression="SectionStart">
            <EditItemTemplate>
                <asp:TextBox ID="sgvEditSecStartDate" runat="server" CssClass="datepick" Text='<%# Bind("SectionStart", "{0:MM-dd-yyyy}") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblSecStartDate" runat="server" Text='<%# Bind("SectionStart", "{0:MM-dd-yyyy}") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="sgvInsertSecStartDate" runat="server" CssClass="datepick" Width="90%"></asp:TextBox>
            </FooterTemplate>
            <HeaderStyle ForeColor="Black" />
        </asp:TemplateField>

         <asp:TemplateField HeaderText="End Date" SortExpression="SectionEnd">
            <EditItemTemplate>
                <asp:TextBox ID="sgvEditSecEndDate" runat="server" CssClass="datepick" Text='<%# Bind("SectionEnd", "{0:MM-dd-yyyy}") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblSecEndDate" runat="server" Text='<%# Bind("SectionEnd", "{0:MM-dd-yyyy}") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="sgvInsertSecEndDate" runat="server" CssClass="datepick" Width="90%"></asp:TextBox>
            </FooterTemplate>
            <HeaderStyle ForeColor="Black" />
        </asp:TemplateField>

         <asp:TemplateField HeaderText="Member">
            <EditItemTemplate>
                <asp:TextBox ID="sgvEditMemberPrice" runat="server" Text='<%# Bind("MemberPrice", "{0:f}") %>'></asp:TextBox>
                <asp:RequiredFieldValidator ID="ReqFieldValEditMemberPrice" ControlToValidate="sgvEditMemberPrice" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="EditSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValEditMemberPrice" ControlToValidate="sgvEditMemberPrice" runat="server" 
                     ErrorMessage="Enter currency format." ValidationGroup="EditSectionValidation" ValidationExpression="^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblMemberPrice" runat="server" Text='<%# Bind("MemberPrice", "{0:C}") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="sgvInsertMemberPrice" runat="server" Width="90%"></asp:TextBox>
                <asp:RequiredFieldValidator ID="ReqFieldValInsertMemberPrice" ControlToValidate="sgvInsertMemberPrice" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="InsertSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValInsertMemberPrice" ControlToValidate="sgvInsertMemberPrice" runat="server" 
                     ErrorMessage="Enter currency format." ValidationGroup="InsertSectionValidation" ValidationExpression="^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </FooterTemplate>
            <HeaderStyle ForeColor="Black" />
        </asp:TemplateField>

         <asp:TemplateField HeaderText="Non-member">
            <EditItemTemplate>
                <asp:TextBox ID="sgvEditNonMemberPrice" runat="server" Text='<%# Bind("NonMemberPrice", "{0:f}") %>'></asp:TextBox>
                 <asp:RequiredFieldValidator ID="ReqFieldValEditNonMemberPrice" ControlToValidate="sgvEditNonMemberPrice" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="EditSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValEditNonMemberPrice" ControlToValidate="sgvEditNonMemberPrice" runat="server" 
                     ErrorMessage="Enter currency format." ValidationGroup="EditSectionValidation" ValidationExpression="^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="sgvLblNonMemberPrice" runat="server" Text='<%# Bind("NonMemberPrice", "{0:C}") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="sgvInsertNonMemberPrice" runat="server" Width="90%"></asp:TextBox>
                 <asp:RequiredFieldValidator ID="ReqFieldValInsertNonMemberPrice" ControlToValidate="sgvInsertNonMemberPrice" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="InsertSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValInsertNonMemberPrice" ControlToValidate="sgvInsertNonMemberPrice" runat="server" 
                     ErrorMessage="Enter currency format." ValidationGroup="InsertSectionValidation" ValidationExpression="^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$" 
                     Display="Dynamic" CssClass="message-error">
                 </asp:RegularExpressionValidator>
            </FooterTemplate>
            <HeaderStyle ForeColor="Black" />
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Action" ShowHeader="False">
            <EditItemTemplate>
                <asp:Button ID="sgvUpdateButton" runat="server" CausesValidation="True" ValidationGroup="EditSectionValidation"  CommandName="Update" Text="Update"></asp:Button>
                &nbsp;<asp:Button ID="sgvCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:Button>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Button ID="sgvEditButton" runat="server" CausesValidation="false" CommandName="Edit" Text="Edit" Width="40%"></asp:Button>
                <asp:Button ID="sgvDeleteButton" runat="server" CausesValidation="false" CommandName="Delete" Text="Delete" 
                    OnClientClick="return confirm('Are you sure you want to delete this Section Information?')" Width="40%"></asp:Button>
            </ItemTemplate>
            <ItemStyle HorizontalAlign="Center" />
            <FooterTemplate>
                <asp:Button ID="sgvBtnAdd" runat="server" CommandName="Add" Text="Add Section" Width="90%" CausesValidation="true" ValidationGroup="InsertSectionValidation" />
            </FooterTemplate>
        </asp:TemplateField>
    </Columns>
    <EmptyDataTemplate>
        <tr> 
            <td colspan="11" style="text-align:center;">
            No section data was found for this course. Sections can be added to this course by clicking the 'Add Section' Button.
            </td>
        </tr>
        <tr>
            <td></td>
            <td><asp:TextBox ID="sgvInsertCourseID" runat="server" ReadOnly="true" Width="90%"></asp:TextBox></td>
            <td><asp:TextBox ID="sgvInsertName" runat="server" Width="90%"></asp:TextBox>
                <asp:RequiredFieldValidator ID="ReqFieldValInsertNameEmpty" ControlToValidate="sgvInsertName" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="InsertSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValInsertNameEmpty" ControlToValidate="sgvInsertName" runat="server" 
                     ErrorMessage="Maximum length is 255." ValidationGroup="InsertSectionValidation" ValidationExpression="^.{1,255}$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </td>
            <td><asp:TextBox ID="sgvInsertSKU" runat="server" Width="90%"></asp:TextBox>
                <asp:RequiredFieldValidator ID="ReqFieldValInsertSKUEmpty" ControlToValidate="sgvInsertSKU" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="InsertSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValInsertSKUEmpty" ControlToValidate="sgvInsertSKU" runat="server" 
                     ErrorMessage="Enter alphanumeric, hyphen, or forward slash. Maximum length is 100." ValidationGroup="InsertSectionValidation" ValidationExpression="^[\w-/]{1,100}$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </td>
            <td><asp:TextBox ID="sgvInsertRegOpenDate" runat="server" CssClass="datepick" Width="90%"></asp:TextBox></td>
            <td><asp:TextBox ID="sgvInsertRegCloseDate" runat="server" CssClass="datepick" Width="90%"></asp:TextBox></td>
            <td><asp:TextBox ID="sgvInsertSecStartDate" runat="server" CssClass="datepick" Width="90%"></asp:TextBox></td>
            <td><asp:TextBox ID="sgvInsertSecEndDate" runat="server" CssClass="datepick" Width="90%"></asp:TextBox></td>
            <td><asp:TextBox ID="sgvInsertMemberPrice" runat="server" Width="90%"></asp:TextBox>
                <asp:RequiredFieldValidator ID="ReqFieldValInsertMemberPriceEmpty" ControlToValidate="sgvInsertMemberPrice" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="InsertSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValInsertMemberPriceEmpty" ControlToValidate="sgvInsertMemberPrice" runat="server" 
                     ErrorMessage="Enter currency format." ValidationGroup="InsertSectionValidation" ValidationExpression="^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </td>
            <td><asp:TextBox ID="sgvInsertNonMemberPrice" runat="server" Width="90%"></asp:TextBox>
                <asp:RequiredFieldValidator ID="ReqFieldValInsertNonMemberPriceEmpty" ControlToValidate="sgvInsertNonMemberPrice" runat="server" 
                     ErrorMessage="Required field." ValidationGroup="InsertSectionValidation" Display="Dynamic" CssClass="message-error">
                </asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegExpValInsertNonMemberPriceEmpty" ControlToValidate="sgvInsertNonMemberPrice" runat="server" 
                     ErrorMessage="Enter currency format." ValidationGroup="InsertSectionValidation" ValidationExpression="^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$" 
                     Display="Dynamic" CssClass="message-error">
                </asp:RegularExpressionValidator>
            </td>
            <td><asp:Button ID="sgvBtnAddEmpty" runat="server" CommandName="Add" Text="Add Section" Width="90%" CausesValidation="true" ValidationGroup="InsertSectionValidation" /></td>
         </tr>
    </EmptyDataTemplate>
</asp:GridView>

更新 我删除了我的合并功能以添加HeaderTemplate。 我有文本框来过滤网格数据。 我不是在寻找使用日期范围进行过滤的解决方案。

是否有人知道我可以添加到gridview的控件,允许用户按一系列日期进行过滤?如果无法做到这一点,可以按照日期范围进行过滤。

更新 我找不到允许用户选择日期范围的控件。相反,我添加了2个文本框,并在它们之间添加了一个标签&#39; To&#39;。

更新 网格可以过滤开始日期而不是范围,因为在用户输入开始日期之后,数据被过滤并且框中的文本被清除。查询可以运行,但我希望将文本保留在开始日期和选项卡到结束日期文本框中,以便用户可以输入范围。我尝试在运行查询后重置开始日期,但是没有出现。 我可以运行查询,将文本保留在开始框中并将光标移至结束日期吗?

0 个答案:

没有答案