Search code examples
gridviewdevexpressaspxgridview

devexpress aspxgridview is not filtering


I have this devexpress gridview:

 <dxwgv:ASPxGridView ID="ASPxGridView1" runat="server" DataSourceID="userDS" AutoGenerateColumns="False" Width="100%" KeyFieldName="contractId" >
        <Styles>
            <Header ImageSpacing="10px" SortingImageSpacing="10px">
            </Header>
        </Styles>
        <SettingsEditing Mode="EditForm" />
        <SettingsPager PageSize="39" ShowDefaultImages="False">
            <AllButton Text="All">
            </AllButton>
            <NextPageButton Text="Next &gt;">
            </NextPageButton>
            <PrevPageButton Text="&lt; Prev">
            </PrevPageButton>
        </SettingsPager>

        <Settings ShowFilterRow="True" ShowFilterRowMenu="true" />
        <Columns>
            <dxwgv:GridViewCommandColumn VisibleIndex="0" Width="55px">
                <EditButton Visible="True">
                </EditButton>
                <DeleteButton Visible="False">
                </DeleteButton>
                <HeaderTemplate>
                </HeaderTemplate>
            </dxwgv:GridViewCommandColumn>
            <dxwgv:GridViewDataTextColumn FieldName="contractId" ReadOnly="True" Visible="false"
                VisibleIndex="1">
            </dxwgv:GridViewDataTextColumn>
            <dxwgv:GridViewDataTextColumn FieldName="usergroupId" Caption="adult usergroupId" ReadOnly="true" VisibleIndex="2">
            </dxwgv:GridViewDataTextColumn>
            <dxwgv:GridViewDataTextColumn FieldName="adultCode" Caption="educ. reg. code" VisibleIndex="3" ReadOnly="True" Visible="true">
            </dxwgv:GridViewDataTextColumn>
            <dxwgv:GridViewDataTextColumn FieldName="accessLevel" VisibleIndex="3" ReadOnly="True" Visible="true">
                <Settings AutoFilterCondition="Like" />
            </dxwgv:GridViewDataTextColumn>
            <dxwgv:GridViewDataTextColumn Settings-AllowAutoFilter="True" FieldName="adultId" ReadOnly="True" Caption="adult userId" Visible="true"
                VisibleIndex="9">
            </dxwgv:GridViewDataTextColumn>
            <dxwgv:GridViewCommandColumn ShowClearFilterButton="true" ShowApplyFilterButton="true" VisibleIndex="1" />
        </Columns>

    </dxwgv:ASPxGridView>

    <dxexport:ASPxGridViewExporter ID="gridExport" runat="server" GridViewID="ASPxGridView1"></dxexport:ASPxGridViewExporter>

    <asp:SqlDataSource ID="userDS" runat="server"
        ConnectionString="<%$ ConnectionStrings:connstring %>"
        SelectCommand="GetAllUserAdultChildGroup"
        OnDeleting="deleting" OnUpdating="updating">
    </asp:SqlDataSource>

And the back end code:

protected void Page_Load(object sender, EventArgs e)
        {
            //change the db cx string for the SqlDataSource to more robust code
            string connString = ConfigurationManager.ConnectionStrings["connstring"].ConnectionString;

            userDS.ConnectionString = connString;

            userDS.UpdateParameters.Add("modified", TypeCode.DateTime, DateTime.Now.ToString());
        }

        protected void userDS_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
        {

        }
        protected void deleting(object sender, SqlDataSourceCommandEventArgs e)
        {
            string s = userDS.DeleteCommand;
        }
        protected void updating(object sender, SqlDataSourceCommandEventArgs e)
        {
            string s = userDS.UpdateCommand;
        }

But when I try to filter: https://i.gyazo.com/16c57c6c4cba47897f08402c143ccaf1.gif

enter image description here

Nothing happens, no postback, nothing.

Do you know if I'm missing anything?


Solution

  • From given code, seems that your gridview bound at runtime using a parameterized stored procedure.

    However, as page life cycle goes around the gridview does not cache actual data, thus you need to provide data every request or round-trips to the server.

    Try these alternatives below to bind your gridview data:

    // use initialization method to bind data
    protected void Page_Init(object sender, EventArgs e)  
    {
         ASPxGridView1.DataSource = userDS;
         ASPxGridView1.DataBind();
    }
    
    // use load method to bind data
    protected void Page_Load(object sender, EventArgs e)
    {
         if (!IsPostBack)
         {
             ASPxGridView1.DataBind();
         }
    }
    
    // or place it on data binding method...
    protected void ASPxGridView1_DataBinding(object sender, EventArgs e) 
    {
        ASPxGridView1.DataSource = userDS;
    }
    

    Note that ASPXGridView by default doesn't store data source information in the ViewState because of performance issues regarding ViewState in client-side compared to plain gridview server control, so that every page request needs a valid data source to bind with.

    Reference: https://www.devexpress.com/Support/Center/Question/Details/K18183