Help in Automatic Paging in Datagrids and DateTime in Access
-
Thanks for the reply, may I know if it is possible to convert a datareader to a dataset? The original code is as follows: strSQL = "SELECT title, price, photo1 FROM Notebook "; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(strSQL, objConnection); /OleDbDataReader myReader; objConnection.Open(); myReader = objCommand.ExecuteReader(); DataGridCatalog.DataSource = myReader; DataGridCatalog.DataBind(); myReader.Close(); objConnection.Close(); And I changed it to something like this: strSQL = "SELECT title, price, photo1 FROM Notebook "; objConnection = new OleDbConnection(strConnect); OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(strSQL, objConnection); objConnection.Open(); DataSet catalog = new DataSet(); objDataAdapter.Fill(catalog, "notebook"); DataGridCatalog.DataBind(); objConnection.Close(); Everything else is unchanged. The program executes all right with no error messages, but nothing is shown at all, i.e, the datagrid is not appearing at all. I guess it is not that simple eh, I just hope it is not an extremely complicated task? THANKS
your getting there To be honest a DataSet is just a collection of IList interfaces get rid of the DataSet, it eats memory change the fill to objDataAdapter.Fill(dtNotebookTable); Here I am popultaing the DataTable directly then set the data source to the DataTables default view Why not the DataTable. Because you never hit it directly. So either attach to the DefaultView or create your Own view frim it. The DataView has a lot of customization methods to it also so you can make the data appear sorted among other things Nick 1 line of code equals many bugs. So don't write any!!
-
Yeah I have never seen it done, and frankly it doesn;t make sense. I mean the data source is a static entitity for a pass though. A datagrid must manuever the data so deleting it is like playing baseball and erasing home plate. How are you going to score without it? There maybe an an underlying way, but I don't do it. If you found a way how much hair would the next programmer have after looking at your code? none. Set the data source to a collection or a DataTable Then your error will disappear I believe the code is DataTable tdTable = new DataTable("MyTable"); OleDataAdapter adapter = new OldDataAdapter(objCommand); adapter.Fill(dtTable); DataGridCatalog.DataSource = dtTable.DefaultView; I could show code with the reader, but I don't believe in steering people down the wrong path. sry Nick 1 line of code equals many bugs. So don't write any!!
Thanks for the quick reply, Ista. Here is what I have modified the code to: objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; DataGridCatalog.DataBind(); objConnection.Close(); The good news is that the datagrid is finally loading and displays the contents in the datagrid, the Previous and next buttons are also clickable, however, the bad news is when I clicked "next" it simply does not show the datagrid at all. There is an OnPageIndexChanged="PageChanger in my Datagrid opening tag. And the codes inside PageChanger is as follows: public void PageChanger(Object sender, DataGridPageChangedEventArgs e) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } My classmate said he used the codes above and it worked for him. What else should I be modifying? THANKS, Nick!!!
-
Thanks for the quick reply, Ista. Here is what I have modified the code to: objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; DataGridCatalog.DataBind(); objConnection.Close(); The good news is that the datagrid is finally loading and displays the contents in the datagrid, the Previous and next buttons are also clickable, however, the bad news is when I clicked "next" it simply does not show the datagrid at all. There is an OnPageIndexChanged="PageChanger in my Datagrid opening tag. And the codes inside PageChanger is as follows: public void PageChanger(Object sender, DataGridPageChangedEventArgs e) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } My classmate said he used the codes above and it worked for him. What else should I be modifying? THANKS, Nick!!!
Explanation I forgot Every time you click the button it posts back So you must save the current index Then at post back set the current index Also, every postback reset the datasource and then rebind() If you extended the DataGrid you could change this behavior but lets keep it simple 1 line of code equals many bugs. So don't write any!!
-
Thanks for the quick reply, Ista. Here is what I have modified the code to: objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; DataGridCatalog.DataBind(); objConnection.Close(); The good news is that the datagrid is finally loading and displays the contents in the datagrid, the Previous and next buttons are also clickable, however, the bad news is when I clicked "next" it simply does not show the datagrid at all. There is an OnPageIndexChanged="PageChanger in my Datagrid opening tag. And the codes inside PageChanger is as follows: public void PageChanger(Object sender, DataGridPageChangedEventArgs e) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } My classmate said he used the codes above and it worked for him. What else should I be modifying? THANKS, Nick!!!
Set the current page index in the postback Dim iIndex as Int32 = 0 if( !postback ) if( not ViewState("Index") is nothing ) then iIndex = Convert.ToInt32( ViewState("Index") ) else iIndex = 0 DataGridCatakig.CurrentPageIndex = iIndex; end if My VB is rusty so there will be errors That should do it 1 line of code equals many bugs. So don't write any!!
-
Explanation I forgot Every time you click the button it posts back So you must save the current index Then at post back set the current index Also, every postback reset the datasource and then rebind() If you extended the DataGrid you could change this behavior but lets keep it simple 1 line of code equals many bugs. So don't write any!!
I hate to be a pest but where do you set this Postback thingy? Is it in the codes of the postback function? if (Page.IsPostBack != true) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } Or is it in the properties window is Visual Studio .NET 2003? I just can't seem to find anywhere with a postback property. Sorry about all these questions but I am hell not a pro with preogramming, thanks Nick.
-
I hate to be a pest but where do you set this Postback thingy? Is it in the codes of the postback function? if (Page.IsPostBack != true) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } Or is it in the properties window is Visual Studio .NET 2003? I just can't seem to find anywhere with a postback property. Sorry about all these questions but I am hell not a pro with preogramming, thanks Nick.
I slipped. Save the index value in the PageIndexChanged Handler(event) then set it in the postback also. goes in the handler DataGridCatalog.CurrentPageIndex = e.NewPageIndex; ViewState{"Index} = e.NewPageIndex; DataGridCatalog.DataBind(); every postback set the data source, grab the Index from the viewstate and set the current index 1 line of code equals many bugs. So don't write any!!
-
I slipped. Save the index value in the PageIndexChanged Handler(event) then set it in the postback also. goes in the handler DataGridCatalog.CurrentPageIndex = e.NewPageIndex; ViewState{"Index} = e.NewPageIndex; DataGridCatalog.DataBind(); every postback set the data source, grab the Index from the viewstate and set the current index 1 line of code equals many bugs. So don't write any!!
Thanks for the reply. From my understanding, is it something like this: public void PageChanger(Object sender, DataGridPageChangedEventArgs e) { if (Page.IsPostBack != true) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } } and private void DataGridCatalog_SelectedIndexChanged(object sender, System.EventArgs e) { if (Page.IsPostBack != true) { Save the index value in the PageIndexChanged Handler(event) } } What is the syntax for Saving the index value anyway? Sorry if these questions sound idiotic....I really am...:( -- modified at 22:19 Wednesday 28th December, 2005
-
Thanks for the reply. From my understanding, is it something like this: public void PageChanger(Object sender, DataGridPageChangedEventArgs e) { if (Page.IsPostBack != true) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } } and private void DataGridCatalog_SelectedIndexChanged(object sender, System.EventArgs e) { if (Page.IsPostBack != true) { Save the index value in the PageIndexChanged Handler(event) } } What is the syntax for Saving the index value anyway? Sorry if these questions sound idiotic....I really am...:( -- modified at 22:19 Wednesday 28th December, 2005
Its my fault, I confused you In the DataGridCatalog_PageIndexChanged // Dont worry about the postback here DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); in the Page_Load // Postback only occurs here put the postback if statement I typed in the 2 answers up Then it will work. If it doesnt past those 2 code punctions in and I can look at then and see whats wrong 1 line of code equals many bugs. So don't write any!!
-
Its my fault, I confused you In the DataGridCatalog_PageIndexChanged // Dont worry about the postback here DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); in the Page_Load // Postback only occurs here put the postback if statement I typed in the 2 answers up Then it will work. If it doesnt past those 2 code punctions in and I can look at then and see whats wrong 1 line of code equals many bugs. So don't write any!!
Thanks again, however it seems I am unable to place e.NewPageIndex in the DateGridCatalog, since it is System.EventArgs e, not DataGridPageChangedEventArgs e. Any ideas? Thanks
-
Thanks again, however it seems I am unable to place e.NewPageIndex in the DateGridCatalog, since it is System.EventArgs e, not DataGridPageChangedEventArgs e. Any ideas? Thanks
e.NewPageIndex is a property of DataGridPageChangedEventArgs you will set the DataGridCatalor.CurrentPageIndex with the value of e.NewPageIndex. does it give you an error? paste your code so I can make sure it looks correct. 1 line of code equals many bugs. So don't write any!!
-
e.NewPageIndex is a property of DataGridPageChangedEventArgs you will set the DataGridCatalor.CurrentPageIndex with the value of e.NewPageIndex. does it give you an error? paste your code so I can make sure it looks correct. 1 line of code equals many bugs. So don't write any!!
Well, I'm still quite lost and confused in the coding. Here's the code: public void PageChanger(Object sender, DataGridPageChangedEventArgs e) { if (Page.IsPostBack != true) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } } private void DataGridCatalog_SelectedIndexChanged(object sender, System.EventArgs e) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } I don't think both functions are supposed to look the same, if I placed "DataGridCatalog.CurrentPageIndex = e.NewPageIndex;" in DataGridCatalog_SelectedIndexChanged then what do I put in for the PageChanger?
-
Well, I'm still quite lost and confused in the coding. Here's the code: public void PageChanger(Object sender, DataGridPageChangedEventArgs e) { if (Page.IsPostBack != true) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } } private void DataGridCatalog_SelectedIndexChanged(object sender, System.EventArgs e) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } I don't think both functions are supposed to look the same, if I placed "DataGridCatalog.CurrentPageIndex = e.NewPageIndex;" in DataGridCatalog_SelectedIndexChanged then what do I put in for the PageChanger?
-
Well, I'm still quite lost and confused in the coding. Here's the code: public void PageChanger(Object sender, DataGridPageChangedEventArgs e) { if (Page.IsPostBack != true) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } } private void DataGridCatalog_SelectedIndexChanged(object sender, System.EventArgs e) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; DataGridCatalog.DataBind(); } I don't think both functions are supposed to look the same, if I placed "DataGridCatalog.CurrentPageIndex = e.NewPageIndex;" in DataGridCatalog_SelectedIndexChanged then what do I put in for the PageChanger?
-
So that means I do not need the OnPageIndexChanged property to get it to work? I am very surprised at this. Here are the codes for the Page_Load event: public void Page_Load(object sender, System.EventArgs e) { if ((string)Session["LoginState"] == "yes") if (Page.IsPostBack != true) { //CatalogBindData(); OleDbConnection objConnection; OleDbCommand objCommand; string strConnect; string SQLSessionString = (string)Session["SQLSessionString"]; string strSQL; string CatalogCategory; strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;"; strConnect += @"Data Source = D:\Database\"; strConnect += @"Catalog.mdb ;"; strSQL = SQLSessionString + (string)Session["CatalogSortString"]; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; DataGridCatalog.DataBind(); objConnection.Close(); } } I cannot say enough thank yous for the help, Nick. :)
-
So that means I do not need the OnPageIndexChanged property to get it to work? I am very surprised at this. Here are the codes for the Page_Load event: public void Page_Load(object sender, System.EventArgs e) { if ((string)Session["LoginState"] == "yes") if (Page.IsPostBack != true) { //CatalogBindData(); OleDbConnection objConnection; OleDbCommand objCommand; string strConnect; string SQLSessionString = (string)Session["SQLSessionString"]; string strSQL; string CatalogCategory; strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;"; strConnect += @"Data Source = D:\Database\"; strConnect += @"Catalog.mdb ;"; strSQL = SQLSessionString + (string)Session["CatalogSortString"]; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; DataGridCatalog.DataBind(); objConnection.Close(); } } I cannot say enough thank yous for the help, Nick. :)
this must be executed each time. dont put it in an if statement OleDbConnection objConnection; OleDbCommand objCommand; string strConnect; string SQLSessionString = (string)Session["SQLSessionString"]; string strSQL; string CatalogCategory; strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;"; strConnect += @"Data Source = D:\Database\"; strConnect += @"Catalog.mdb ;"; strSQL = SQLSessionString + (string)Session["CatalogSortString"]; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; DataGridCatalog.DataBind(); objConnection.Close(); 1 line of code equals many bugs. So don't write any!!
-
So that means I do not need the OnPageIndexChanged property to get it to work? I am very surprised at this. Here are the codes for the Page_Load event: public void Page_Load(object sender, System.EventArgs e) { if ((string)Session["LoginState"] == "yes") if (Page.IsPostBack != true) { //CatalogBindData(); OleDbConnection objConnection; OleDbCommand objCommand; string strConnect; string SQLSessionString = (string)Session["SQLSessionString"]; string strSQL; string CatalogCategory; strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;"; strConnect += @"Data Source = D:\Database\"; strConnect += @"Catalog.mdb ;"; strSQL = SQLSessionString + (string)Session["CatalogSortString"]; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; DataGridCatalog.DataBind(); objConnection.Close(); } } I cannot say enough thank yous for the help, Nick. :)
private int Index = 0; public void Page_Load(object sender, System.EventArgs e) { if ((string)Session["LoginState"] == "yes") //CatalogBindData(); OleDbConnection objConnection; OleDbCommand objCommand; string strConnect; string SQLSessionString = (string)Session["SQLSessionString"]; string strSQL; string CatalogCategory; strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;"; strConnect += @"Data Source = D:\Database\"; strConnect += @"Catalog.mdb ;"; strSQL = SQLSessionString + (string)Session["CatalogSortString"]; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; // now set the current index if(!IsPostBack ) { if(! ViewState["Indexc"] ) Index = Convert.ToInt32( ViewState["Index"] ); else index = 0; DataGridCatalog.CurrentPageIndex = Index; } DataGridCatalog.DataBind(); objConnection.Close(); } your PageLoaD should look like so 1 line of code equals many bugs. So don't write any!!
-
So that means I do not need the OnPageIndexChanged property to get it to work? I am very surprised at this. Here are the codes for the Page_Load event: public void Page_Load(object sender, System.EventArgs e) { if ((string)Session["LoginState"] == "yes") if (Page.IsPostBack != true) { //CatalogBindData(); OleDbConnection objConnection; OleDbCommand objCommand; string strConnect; string SQLSessionString = (string)Session["SQLSessionString"]; string strSQL; string CatalogCategory; strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;"; strConnect += @"Data Source = D:\Database\"; strConnect += @"Catalog.mdb ;"; strSQL = SQLSessionString + (string)Session["CatalogSortString"]; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; DataGridCatalog.DataBind(); objConnection.Close(); } } I cannot say enough thank yous for the help, Nick. :)
private void DataGridCatalog_SelectedIndexChanged(object sender, System.EventArgs e) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; ViewState["Index"] = e.NewPageIndex; DataGridCatalog.DataBind(); } This should look like so 1 line of code equals many bugs. So don't write any!!
-
private int Index = 0; public void Page_Load(object sender, System.EventArgs e) { if ((string)Session["LoginState"] == "yes") //CatalogBindData(); OleDbConnection objConnection; OleDbCommand objCommand; string strConnect; string SQLSessionString = (string)Session["SQLSessionString"]; string strSQL; string CatalogCategory; strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;"; strConnect += @"Data Source = D:\Database\"; strConnect += @"Catalog.mdb ;"; strSQL = SQLSessionString + (string)Session["CatalogSortString"]; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; // now set the current index if(!IsPostBack ) { if(! ViewState["Indexc"] ) Index = Convert.ToInt32( ViewState["Index"] ); else index = 0; DataGridCatalog.CurrentPageIndex = Index; } DataGridCatalog.DataBind(); objConnection.Close(); } your PageLoaD should look like so 1 line of code equals many bugs. So don't write any!!
Thanks, but I am still getting errors: It seems in the statement if(!ViewState["Indexc"] ), it says Operator ! cannot be applied to operand of type 'object'. And as said earlier, I can't place e.NewPageIndex in the DataGridCatalog_SelectedIndexChanged because it is System.EventArgs e. Any ideas? Thanks
-
Thanks, but I am still getting errors: It seems in the statement if(!ViewState["Indexc"] ), it says Operator ! cannot be applied to operand of type 'object'. And as said earlier, I can't place e.NewPageIndex in the DataGridCatalog_SelectedIndexChanged because it is System.EventArgs e. Any ideas? Thanks
first if( ViewState["Index"] == null ) will fix that Change the DataGridCatalog_Select... to private void DataGridCatalog_PageChanged( object sender. DataGridPageChangedEventArgs e ) that should fix everything SelectedIndexChanged is the default event. We dont want that event. We want the PageChanged event 1 line of code equals many bugs. So don't write any!!
-
private void DataGridCatalog_SelectedIndexChanged(object sender, System.EventArgs e) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; ViewState["Index"] = e.NewPageIndex; DataGridCatalog.DataBind(); } This should look like so 1 line of code equals many bugs. So don't write any!!
Thanks for all the help. I just executed the program, there is no error messages, however, when I click on the "Next" button it simply refreshes and shows exactly the same contents as before, seems it isn't working. OleDbConnection objConnection; OleDbCommand objCommand; string strConnect; string SQLSessionString = (string)Session["SQLSessionString"]; string strSQL; string CatalogCategory; strConnect = @"Provider=Microsoft.Jet.OLEDB.4.0;"; strConnect += @"Data Source = D:\Database\"; strConnect += @"Catalog.mdb ;"; strSQL = SQLSessionString + (string)Session["CatalogSortString"]; objConnection = new OleDbConnection(strConnect); objCommand = new OleDbCommand(strSQL, objConnection); objConnection.Open(); DataTable CatalogTable = new DataTable("notebook"); OleDbDataAdapter Catalogadapter = new OleDbDataAdapter(objCommand); Catalogadapter.Fill(CatalogTable); DataGridCatalog.DataSource = CatalogTable.DefaultView; if(!IsPostBack ) { if( ViewState["Index"] == null ) { Index = Convert.ToInt32( ViewState["Index"] ); } else { Index = 0; } DataGridCatalog.CurrentPageIndex = Index; } DataGridCatalog.DataBind(); objConnection.Close(); and: private void DataGridCatalog_PageChanged( object sender, DataGridPageChangedEventArgs e ) { DataGridCatalog.CurrentPageIndex = e.NewPageIndex; ViewState["Index"] = e.NewPageIndex; DataGridCatalog.DataBind(); } What could I be missing??? Any clues? Thanks!