Situacija je sledeca:
MS Access baza: |tabela1| id - AutoNumber, Polje1 - Text, Polje2 - Text, .....
Paging sam zamislio tako da stanje grid-a cuva u ViewState-u, a takodje imam i 2 eksterna dugmeta Previous i Next, kao i dva OleDBCommand-a (cmdNext, cmdPrevious). Evo ga deo koda:
Code:
.......
private int CurrentPage;
private void Page_Load(object sender, System.EventArgs e)
{
....
if(!Page.IsPostBack)
{
conn.Open();
cmdNext=new OleDbCommand("SELECT TOP 10 id, Polje1, Polje2 FROM tabela1 ORDER BY id DESC", conn);
fillGrid(cmdNext);
}
}
private void fillGrid(System.Data.OleDb.OleDbCommand currentOleDbCommand)
{
System.Data.OleDb.OleDbDataReader dr;
...
conn.Open();
dr=currentOleDbCommand.ExecuteReader();
DataGrid1.DataSource=dr;
DataGrid1.DataBind();
dr.Close();
conn.Close();
ViewState["CurrentPage"]=CurrentPage;
ViewState[CurrentPage.ToString()]=DataGrid1.Items[0].Cells[0].Text;
if(DataGrid1.Items.Count<DataGrid1.PageSize)
{
btnNext.Enabled=false;
}
}
private void btnNext_Click(object sender, System.EventArgs e)
{
btnPrevious.Enabled=true;
CurrentPage=(int)(ViewState["CurrentPage"]);
CurrentPage++;
string lastid=DataGrid1.Items[9].Cells[0].Text;
conn.Open();
string upit="SELECT TOP 10 id, Polje1, Polje2 FROM tabela1 WHERE id<"+lastid+" ORDER BY id DESC";
cmdNext=new OleDbCommand(upit, conn);
fillGrid(cmdNext);
}
private void btnPrevious_Click(object sender, System.EventArgs e)
{
btnNext.Enabled=true;
CurrentPage=(int)(ViewState["CurrentPage"]);
CurrentPage--;
if(CurrentPage>=0)
{
string firstid;
firstid=(string)(ViewState[CurrentPage.ToString()]);
conn.Open();
cmdPrevious=new OleDbCommand("SELECT TOP 10 id, Polje1, Polje2 FROM tabela1 WHERE id>="+firstid+" ORDER BY id DESC", conn);
fillGrid(cmdPrevious);
}
}
.......
private int CurrentPage;
private void Page_Load(object sender, System.EventArgs e)
{
....
if(!Page.IsPostBack)
{
conn.Open();
cmdNext=new OleDbCommand("SELECT TOP 10 id, Polje1, Polje2 FROM tabela1 ORDER BY id DESC", conn);
fillGrid(cmdNext);
}
}
private void fillGrid(System.Data.OleDb.OleDbCommand currentOleDbCommand)
{
System.Data.OleDb.OleDbDataReader dr;
...
conn.Open();
dr=currentOleDbCommand.ExecuteReader();
DataGrid1.DataSource=dr;
DataGrid1.DataBind();
dr.Close();
conn.Close();
ViewState["CurrentPage"]=CurrentPage;
ViewState[CurrentPage.ToString()]=DataGrid1.Items[0].Cells[0].Text;
if(DataGrid1.Items.Count<DataGrid1.PageSize)
{
btnNext.Enabled=false;
}
}
private void btnNext_Click(object sender, System.EventArgs e)
{
btnPrevious.Enabled=true;
CurrentPage=(int)(ViewState["CurrentPage"]);
CurrentPage++;
string lastid=DataGrid1.Items[9].Cells[0].Text;
conn.Open();
string upit="SELECT TOP 10 id, Polje1, Polje2 FROM tabela1 WHERE id<"+lastid+" ORDER BY id DESC";
cmdNext=new OleDbCommand(upit, conn);
fillGrid(cmdNext);
}
private void btnPrevious_Click(object sender, System.EventArgs e)
{
btnNext.Enabled=true;
CurrentPage=(int)(ViewState["CurrentPage"]);
CurrentPage--;
if(CurrentPage>=0)
{
string firstid;
firstid=(string)(ViewState[CurrentPage.ToString()]);
conn.Open();
cmdPrevious=new OleDbCommand("SELECT TOP 10 id, Polje1, Polje2 FROM tabela1 WHERE id>="+firstid+" ORDER BY id DESC", conn);
fillGrid(cmdPrevious);
}
}
Kada ovo pokusam da izvrsim klikom na dugme Next Explorer mi izbaci sledecu gresku:
Syntax error (missing operator) in query expression 'id<'
Kada postavim breakpoint kod stringa upit, prelaskom misa preko id<"+lastid+" pokazuje mi id="" sto kapiram znaci da nikakva vrednost nije dodeljena promenljivoj lastid. Nije mi jasno kako???