[Mono-bugs] [Bug 77573][Wis] New - DataGrid / PagedDatasource Error when using DataTable as DataSource

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Wed Feb 15 21:48:49 EST 2006


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by monobugzilla at yellowguppy.com.

http://bugzilla.ximian.com/show_bug.cgi?id=77573

--- shadow/77573	2006-02-15 21:48:49.000000000 -0500
+++ shadow/77573.tmp.30951	2006-02-15 21:48:49.000000000 -0500
@@ -0,0 +1,136 @@
+Bug#: 77573
+Product: Mono: Class Libraries
+Version: 1.1
+OS: GNU/Linux [Other]
+OS Details: Linux gordon 2.4.27-2-386 Debian testing
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Wishlist
+Component: Sys.Web
+AssignedTo: gonzalo at ximian.com                            
+ReportedBy: monobugzilla at yellowguppy.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: DataGrid / PagedDatasource Error when using DataTable as DataSource
+
+I have a datagrid in an form which has the DataSource set with a
+System.Data.DataTable.  On the MS runtime the datagrid, successfully
+databinds and displays the data.
+
+On Mono, it fails with the error..
+
+<0x00175> System.Web.UI.WebControls.PagedDataSource:get_DataSourceCount ()
+in <0x00034> System.Web.UI.WebControls.PagedDataSource:get_PageCount () in
+<0x000ce> System.Web.UI.WebControls.DataGrid:InitializeNumericPager
+(System.Web.UI.WebControls.DataGridItem item, Int32 columnSpan,
+System.Web.UI.WebControls.PagedDataSource paged) in <0x00051>
+System.Web.UI.WebControls.DataGrid:InitializePager
+(System.Web.UI.WebControls.DataGridItem item, Int32 columnSpan,
+System.Web.UI.WebControls.PagedDataSource pagedDataSource) in <0x000a7>
+System.Web.UI.WebControls.DataGrid:CreateItem (Int32 item_index, Int32
+data_source_index, ListItemType type, Boolean data_bind, System.Object
+data_item, System.Web.UI.WebControls.PagedDataSource paged) in <0x00273>
+System.Web.UI.WebControls.DataGrid:CreateControlHierarchy (Boolean
+useDataSource) in <0x00095> System.Web.UI.WebControls.BaseDataList:DataBind ()
+
+The datagrid definition is..
+
+<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False"
+PageSize="20" AllowPaging="True" CssClass="datatable">
+...
+<PagerStyle Mode="NumericPages">
+</PagerStyle>
+</asp:DataGrid>
+
+The error generated on the webform is..
+
+*Error Message: *HTTP 500. The data source must implement ICollection
+
+This error appears to maps back to
+http://svn.myrealbox.com/source/trunk/mcs/class/System.Web/System.Web.UI.WebControls/PagedDataSource.cs
+
+public int DataSourceCount {
+get {
+if (source == null)
+return 0;
+               
+if (IsCustomPagingEnabled)
+return virtual_count;
+
+if (source is ICollection)
+return ((ICollection) source).Count;
+
+throw new HttpException ("The data source must implement ICollection");
+}
+}
+
+Since a DataTable doesn't implement ICollection directely it appears to be
+causing the problem?  Should something like the following be added to the
+DataSourceCount method before the error is thrown?
+
+if (source is IListSource) {
+return ((ICollection) ((IListSource)source).GetList() ).Count;
+}
+
+Additionally, the GetEnumerator method doesn't appear to anticipate a
+DataTable or IListSource object.  Something like the following might be
+appropriate.
+
+public IEnumerator GetEnumerator ()
+{
+
+// IList goes first, as it implements ICollection
+
+> IList list
+> if (source is IListSource) {
+>  list = ((IListSource) source).GetList();
+> else {
+>   list = source as IList;
+> }
+
+
+int first = 0;
+int count;
+int limit;
+if (list != null) {
+first = FirstIndexInPage;
+count = ((ICollection) source).Count;
+limit = ((first + page_size) > count) ? (count - first) : page_size;
+return GetListEnum (list, first, first + limit);
+}
+
+ICollection col = source as ICollection;
+if (col != null) {
+first = FirstIndexInPage;
+count = col.Count;
+limit = ((first + page_size) > count) ? (count - first) : page_size;
+return GetEnumeratorEnum (col.GetEnumerator (), first, first + page_size);
+}
+
+return source.GetEnumerator ();
+}
+
+The software that I have installed is..
+
+ii  libapache2-mod-mono        1.1.13-0pre3   Run ASP.NET Pages on UNIX
+with Apache 2 and Mo
+ii  libmono0                   1.1.13.1-1     libraries for the Mono JIT
+ii  mono                       1.1.13.1-1     Mono CLI (.NET) runtime
+ii  mono-apache-server         1.1.13-0pre1   backend for mod_mono Apache
+module
+ii  mono-assemblies-base       1.1.13.1-1     Mono class library -
+transistion package
+ii  mono-classlib-1.0          1.1.13.1-1     Mono class library (1.0)
+ii  mono-classlib-2.0          1.1.13.1-1     Mono class library (2.0)
+ii  mono-common                1.1.13.1-1     common files for Mono
+ii  mono-gmcs                  1.1.13.1-1     Mono C# 2.0 compiler
+ii  mono-jit                   1.1.13.1-1     fast CLI JIT/AOT compiler for
+Mono
+ii  mono-mcs                   1.1.13.1-1     Mono C# compiler
+ii  mono-xsp                   1.0.5-2        simple web server to run
+ASP.NET applications
+ii  mono-xsp-base              1.1.13-0pre1   base libraries for XSP 1.1
+ii  mono-xsp2-base             1.1.13-0pre1   base libraries for XSP 2.0


More information about the mono-bugs mailing list