.net server control is almost feature complete and functional. All .net examples...
[infodrom/rico3] / examples / dotnet / simplegrid.aspx
1 <%@ Page Language="VB" ResponseEncoding="iso-8859-1" Debug="true" %>\r
2 <%@ Register TagPrefix="Rico" Assembly="Rico" NameSpace="Rico" %>\r
3 <%@ Register TagPrefix="My" TagName="dbLib" Src="dbConnect.ascx" %>\r
4 <My:dbLib id='app' runat='server' />\r
5 \r
6 <script runat="server">\r
7 \r
8 Sub Page_Load(Sender As object, e As EventArgs)\r
9   dim category,lastCategory,Discounts,Gross,subtotals(1),grandtotals(1),i\r
10   dim command,rdr\r
11 \r
12   if not app.OpenDB() then exit sub\r
13   \r
14   for i=0 to 1\r
15     grandtotals(i)=0\r
16   next\r
17 \r
18   ' define heading\r
19   ex1.AddHeadingRow(true)\r
20   ex1.AddCell("Product")\r
21   ex1.AddCell("Gross Sales")\r
22   ex1.AddCell("Discounts")\r
23   ex1.AddCell("Net Sales")\r
24   ex1.AddCell("Avg Discount")\r
25 \r
26   command = app.dbConnection.CreateCommand()\r
27   command.CommandText="select CategoryName,ProductName, " & _\r
28     "SUM(od.UnitPrice*Quantity) as GrossSales, " & _\r
29     "SUM(od.UnitPrice*Quantity*Discount) as Discounts " & _\r
30     "from ((Order_Details od " & _\r
31     "inner join Products p on p.ProductID=od.ProductID) " & _\r
32     "inner join Categories c on p.CategoryID=c.CategoryID) " & _\r
33     "group by CategoryName,ProductName " & _\r
34     "order by CategoryName,ProductName"\r
35   rdr = command.ExecuteReader()\r
36   while rdr.Read()\r
37     category=rdr("CategoryName")\r
38     Gross=rdr("GrossSales")\r
39     Discounts=rdr("Discounts")\r
40     if category<>lastCategory then\r
41       if not IsNothing(lastCategory) then\r
42         AddRow("Subtotal",subtotals(0),subtotals(1))\r
43         ex1.SetRowAttr("class","Subtotal")\r
44       end if\r
45       ex1.AddDataRow\r
46       ex1.SetRowAttr("class","CatHead")\r
47       ex1.AddCell(category)\r
48       ex1.AddCell("")\r
49       ex1.AddCell("")\r
50       ex1.AddCell("")\r
51       ex1.AddCell("")\r
52       for i=0 to 1\r
53         subtotals(i)=0\r
54       next\r
55       lastCategory=category\r
56     end if\r
57     subtotals(0)+=Gross\r
58     grandtotals(0)+=Gross\r
59     subtotals(1)+=Discounts\r
60     grandtotals(1)+=Discounts\r
61     AddRow(rdr("ProductName"),Gross,Discounts)\r
62   end while\r
63   rdr.Close()\r
64   if not IsNothing(lastCategory) then\r
65     AddRow("Subtotal",subtotals(0),subtotals(1))\r
66     ex1.SetRowAttr("class","Subtotal")\r
67   end if\r
68   AddRow("Grand Total",grandtotals(0),grandtotals(1))\r
69   ex1.SetRowAttr("class","GrandTotal")\r
70 End Sub\r
71 \r
72 sub AddRow(ProductName as String, Gross as Double, Discounts as Double)\r
73   dim pct as double\r
74   ex1.AddDataRow()\r
75   ex1.AddCell(ProductName)\r
76   ex1.AddCell("$" & FormatNumber(Gross,0,-1,0,-1))\r
77   ex1.SetCellAttr("class","number")\r
78   ex1.AddCell("$" & FormatNumber(Discounts,0,-1,0,-1))\r
79   ex1.SetCellAttr("class","number")\r
80   ex1.AddCell("$" & FormatNumber(Gross-Discounts,0,-1,0,-1))\r
81   ex1.SetCellAttr("class","number")\r
82   pct=Discounts/Gross\r
83   ex1.AddCell(pct.toString("0%"))\r
84   ex1.SetCellAttr("class","number")\r
85 end sub\r
86 \r
87 Protected Overrides Sub Render(writer as HTMLTextWriter)\r
88   select case lcase(Request.QueryString("fmt"))\r
89     case "xl":  ex1.RenderExcel("rico.xls")\r
90     case "csv": ex1.RenderDelimited("rico.csv", ",", "")\r
91     case else:  MyBase.Render(writer)   ' output html\r
92   end select\r
93 End Sub\r
94 \r
95 </script>\r
96 \r
97 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">\r
98 <html>\r
99 <head>\r
100 <title>Rico SimpleGrid-Example 1</title>\r
101 \r
102 <Rico:LoadClient checkQueryString='true' runat='server' />\r
103 <link href="../demo.css" type="text/css" rel="stylesheet" />\r
104 \r
105 \r
106 <script type='text/javascript'>\r
107 function ExportGridClient() {\r
108   ex1['grid'].printVisible();\r
109 }\r
110 \r
111 function ExportGridServer(ExportType) {\r
112   if (Rico.isIE) {\r
113     location.href+='&fmt='+ExportType;\r
114   } else {\r
115     window.open(location.href+'&fmt='+ExportType);\r
116   }\r
117 }\r
118 </script>\r
119 \r
120 <style type="text/css">\r
121 .CatHead {\r
122   background:blue;\r
123   color:white;\r
124   font-weight:bold !important;\r
125 }\r
126 .Subtotal {\r
127   background:#888;\r
128   color:white;\r
129   font-weight:bold !important;\r
130 }\r
131 .GrandTotal {\r
132   background:black;\r
133   color:white;\r
134   font-weight:bold !important;\r
135 }\r
136 div.ricoLG_cell {\r
137   white-space:nowrap;\r
138 }\r
139 .number {\r
140   text-align: right;\r
141 }\r
142 </style>\r
143 \r
144 </head>\r
145 \r
146 <body>\r
147 \r
148 <div id='explanation'>\r
149 Base Library: \r
150 <script type='text/javascript'>\r
151 document.write(Rico.Lib+' '+Rico.LibVersion);\r
152 </script>\r
153 <hr>\r
154 <p><strong>Rico: SimpleGrid</strong></p>\r
155 <p>Rico's SimpleGrid is an unbuffered grid - all data exists in the DOM.\r
156 It shares many of the same characteristics as Rico's better known LiveGrid.\r
157 SimpleGrids have resizable columns, frozen columns on the left, and can use the\r
158 same CSS styling as LiveGrids. Sorting and filtering can also be enabled\r
159 at the developer's discretion. Unlike LiveGrids, each cell in a SimpleGrid\r
160 can be formatted individually.\r
161 </div>\r
162 \r
163 \r
164 <div>\r
165 <button onclick="ExportGridClient()">Export from client<br>to HTML Table</button>\r
166 <button onclick="ExportGridServer('xl')">Export from server<br>to Excel</button>\r
167 <button onclick="ExportGridServer('csv')">Export from server<br>to CSV</button>\r
168 </div>\r
169 \r
170 <Rico:SimpleGrid runat='server' id='ex1' FrozenCols='1'>\r
171   <Rico:Column runat='server' width='200' />\r
172   <Rico:Column runat='server' />\r
173   <Rico:Column runat='server' />\r
174   <Rico:Column runat='server' />\r
175   <Rico:Column runat='server' />\r
176 </Rico:SimpleGrid>\r
177 \r
178 </body>\r
179 </html>\r
180 \r