This appears to be a common problem experienced when using DataTables and refreshing bindings:
asp.net gridview not refreshing when changing pages - Google Search[
^]
Here is an example of a solution found using the above Google Search:
c# - GridView does not change on page change - Stack Overflow[
^]. According to this, your code should be:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGridView();
}
}
protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
BindGridView(e.NewPageIndex);
}
private void BindGridView(int pageNumber = 0)
{
MySqlConnection con = new MySqlConnection(constr);
MySqlCommand cmd = new MySqlCommand("SELECT jpw.jpw_id, jpw.post_id,
GROUP_CONCAT(jpw.job_title SEPARATOR ', ') as job, " +
"ub.name,cat.name as 'Category',jpp.description,sum(jpw.amount) as amount, " +
"sum(jpw.applied_count) as applied_count, jpw.suspend, jp.is_feat " +
"FROM xtime.job_post_worker jpw " +
"left join job_post jp on jpw.post_id = jp.post_id " +
"left join users_business ub on jp.ub_id = ub.ub_id " +
"left join job_post_processing jpp on jp.status = jpp.status " +
"left join category cat on jp.category = cat.cat_id " +
"GROUP BY jpw.post_id " +
"ORDER BY jpw.jpw_id ASC;", con);
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
Gridview1.PageIndex = pageNumber;
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
I know that this looks like semantics however indications are that it is the wrong location to call this. This minor change apparently works.
Also, as a side-note, to stop
SQL injection attacks[
^] you need to use command parameters and not string concatenation for building SQL queries.
UPDATE: Here is a Mock test (as I don't have your DB):
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<asp:GridView ID="Gridview1" runat="server"
OnPageIndexChanging="Gridview1_PageIndexChanging"
EnableViewState="true" PageSize="10" AllowPaging="true" />
</asp:Content>
And the Code-behind:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGridView();
}
}
protected void Gridview1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
BindGridView(e.NewPageIndex);
}
private void BindGridView(int pageNumber = 0)
{
Gridview1.PageIndex = pageNumber;
Gridview1.DataSource = GetData();
Gridview1.DataBind();
}
private static List<person> GetData()
{
var persons = new List<person>();
for (int i = 0; i < 100; i++)
{
persons.Add(new person { First = $"First {i}", Last = $"Last {i}", Age = i });
}
return persons;
}
}
class person
{
public string First { get; set; }
public string Last { get; set; }
public int Age { get; set; }
}
Works as expected.