(OWC) y ASP.NET - Willy .Net
(OWC) y ASP.NET - Willy .Net
(OWC) y ASP.NET - Willy .Net
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Cómo Utilizar un DataSet con un componente Gráfico de<br />
Office XP (<strong>OWC</strong>) y <strong>ASP</strong>.<strong>NET</strong><br />
En este artículo paso a paso se describe cómo crear un gráfico que utiliza el componente Chart<br />
de Office XP con datos de un DataSet. Las soluciones que se presentan en este artículo utilizan<br />
Visual Basic .<strong>NET</strong> y <strong>ASP</strong>.<strong>NET</strong>.<br />
Orígenes de datos para el componente Chart<br />
El componente Chart de Office XP admite tipos distintos de origen de datos como la siguiente:<br />
Componente de gráfico se puede enlazar con un origen de datos que implementa el<br />
interfaz IDataSource, una interface estándar COM de control de origen de datos. El otro<br />
Web Components de Office XP el componente PivotTable, el componente Spreadsheet y<br />
los controles DataSource es decir implementa IDataSource y puede ser origen de datos<br />
posibles de un gráfico.<br />
Componente de gráfico se puede enlazar a un objeto Recordset de ADO.<br />
Componente de gráfico se puede enlazar con una secuencia XML si el dato persiste en<br />
la secuencia en el formato de persistencia XML.<br />
Un componente Chart puede utilizar datos literales del formulario de una cadena o una<br />
matriz delimitadas; no se considera el límite un gráfico que utiliza datos literales.<br />
La clase DataSet en ADO.<strong>NET</strong> no implementa IDatasource y el .<strong>NET</strong> Framework no admite un<br />
medio directo de convertir un objeto DataSet de ADO.<strong>NET</strong> a un objeto Recordset de ADO. Si<br />
tiene un DataSet de el que desea crear un gráfico, puede utilizar las una dos soluciones que se<br />
presentan en este artículo. Puede arrastrar cualquiera de transformación el DataSet en una<br />
secuencia que utiliza el formato de persistencia XML para ADO o puede generar datos literales<br />
del DataSet.<br />
Utilice el formato de persistencia XML<br />
Esta solución describe cómo transformar un DataSet en una secuencia XML con la que se<br />
puede enlazar el componente Chart. Esta solución tiene dos partes: un controlador HTTP de<br />
servidor que crea un DataSet y que lo transforma en una secuencia XML y una secuencia de<br />
comandos de cliente que enlaza el componente Chart a la secuencia XML.<br />
Cree un controlador HTTP para crear un DataSet y transformarlo en un origen de datos<br />
XML<br />
1. En el menú Archivo en Visual Studio .<strong>NET</strong>, haga clic en Nuevo y a continuación, haga<br />
clic en Proyecto.
2. Haga clic en Proyectos de Visual Basic, haga clic en la plantilla Proyecto Web vacío y<br />
a continuación, ChartDemo1 llámelo.<br />
3. En el menú Proyecto, haga clic en Agregar referencia, haga clic para seleccionar los<br />
ensamblados siguientes y a continuación, haga clic en Aceptar:<br />
o System.Data.dll<br />
o System.dll<br />
o System.Web.dll<br />
o System.XML.dll<br />
4. En el menú Proyecto, elija Agregar clase, nombre la clase MakeData.vb y Abrir Click a<br />
continuación.<br />
5. Reemplace el código en MakeData.vb por siguiente.<br />
Nota Debe cambiar Id. de usuario y contraseña = a los valores correctos antes de ejecutar este código. Asegúrese de que Id. de<br />
usuario tiene los permisos apropiados realizar esta operación en la base de datos.<br />
6. Imports System.Web<br />
7. Imports System.Xml<br />
8. Imports System.Xml.Xsl<br />
9. Imports System.Data<br />
10. Imports System.Data.SqlClient<br />
11.<br />
12. Public Class MakeData<br />
13. Implements IHttpHandler<br />
14.<br />
15. Public ReadOnly Property IsReusable() As Boolean _<br />
16. Implements IHttpHandler.IsReusable<br />
17. Get<br />
18. Return False<br />
19. End Get<br />
20. End Property<br />
21.<br />
22. Public Sub ProcessRequest(ByVal context As HttpContext) _<br />
23. Implements IHttpHandler.ProcessRequest
24. Dim sConn As String = "User<br />
ID=;Password=;Initial Catalog=Northwind;Data<br />
Source=YourSQLServer;"<br />
25. Dim sSQL As String = _<br />
26. "SELECT LastName, Sum([UnitPrice]*[Quantity]*(1-[Discount])) AS<br />
OrderTotal " & _<br />
27. "FROM Employees INNER JOIN (Orders INNER JOIN [Order<br />
Details] ON " & _<br />
28. "Orders.OrderID = [Order Details].OrderID) ON<br />
Employees.EmployeeID = " & _<br />
29. "Orders.EmployeeID GROUP BY LastName"<br />
30.<br />
31. 'Connect to the data source.<br />
32. Dim nwindConn As SqlConnection = New SqlConnection(sConn)<br />
33. nwindConn.Open()<br />
34.<br />
35. 'Build a dataSet for Employee Sales.<br />
36. Dim ds As DataSet<br />
37. ds = New DataSet("MyDataset")<br />
38. Dim da As SqlDataAdapter = New SqlDataAdapter(sSQL, nwindConn)<br />
39. da.Fill(ds)<br />
40.<br />
41. 'Transform the dataSet using the stylesheet.<br />
42. Dim xmlDoc_ds As XmlDataDocument = New XmlDataDocument(ds)<br />
43. Dim xslTran As XslTransform = New XslTransform()<br />
44. xslTran.Load(context.Server.MapPath("Rowset.xslt"))<br />
45.<br />
46. 'Return the persisted recordset.<br />
47. context.Response.ContentType = "text/xml"<br />
48. context.Response.Charset = ""
49. xslTran.Transform(xmlDoc_ds, Nothing, context.Response.Output)<br />
50.<br />
51. End Sub<br />
52.<br />
End Class<br />
NOTA: En el código, se cambia la cadena de conexión en sConn a una cadena de<br />
conexión válida de un equipo que ejecuta Microsoft SQL Server y que contiene la base<br />
de datos de ejemplo Neptuno.<br />
53. En el menú Proyecto, haga clic en Agregar nuevo elemento, haga clic en la plantilla<br />
Archivo de configuración del Web y después, haga clic en Abrir.<br />
54. Sustituya los contenidos de Web.Config por siguiente:<br />
55. <br />
56. <br />
57. <br />
58. <br />
59. <br />
60. <br />
61. <br />
<br />
62. En el menú Proyecto, haga clic en Agregar nuevo elemento, elija la plantilla, el nombre<br />
el archivo Rowset.xslt y el Abrir Click XSLT File a continuación.<br />
63. Sustituya los contenidos de Rowset.xslt por siguiente:<br />
64. <br />
65. <br />
66. <br />
67.
71. <br />
72. <br />
73. <br />
74. <br />
75. <br />
76. <br />
77. <br />
78. <br />
79. <br />
80. <br />
81. <br />
82. <br />
83. <br />
84. <br />
85. <br />
86. <br />
87. <br />
88. <br />
89. <br />
90. <br />
91. <br />
92. <br />
93. <br />
94. <br />
95. <br />
<br />
96. Siga estos pasos para probar el controlador HTTP de MakeData:<br />
1. En el menú Generar, haga clic en Generar solución.
2. Inicie Microsoft Internet Explorer y después, busque<br />
/ChartDemo1/MakeData.aspx SuServidorWeb http://<br />
(donde es SuServidorWeb el nombre de su servidor Web.)<br />
3. Examine el XML que muestra el explorador. XML utiliza el esquema definido<br />
para el formato de persistencia XML.<br />
Enlace el componente Gráfico de Office XP al origen de datos XML<br />
1. Abra el proyecto de aplicación Web ChartDemo1 en Visual Studio .<strong>NET</strong>.<br />
2. En el menú Proyecto, haga clic en Add HTMLPage.<br />
3. Dé nombre a la página nueva Default.htm y a continuación, haga clic en Abrir.<br />
Default.htm aparece en vista Diseño.<br />
4. Haga clic en Default.htm, haga clic en Propiedades, cambie el Esquema de destino a<br />
Internet Explorer 5.0 y a continuación, haga clic en Aplicar.<br />
5. Cambie Default Scripting Language a VBScript y a continuación, haga clic en<br />
Aceptar.<br />
6. Siga estos pasos para agregar un componente Chart de Office XP a Default.htm:<br />
1. En el menú Herramientas, haga clic en Personalizar cuadro de herramientas.<br />
2. En la lista Componentes COM, haga clic en Microsoft Office Chart 10.0 y a<br />
continuación, haga clic en Aceptar.<br />
3. Arrastre un control Chartspace sobre Default.htm.<br />
7. Siga estos pasos para agregar un control Button a Default.htm:<br />
1. En la ventana Cuadro de herramientas, haga clic en HTML.<br />
2. Arrastre un control Button sobre Default.htm.<br />
3. Cambie a Make Chart la propiedad Value del botón.<br />
8. Haga clic en el botón que agregó a Default.htm y a continuación, haga clic en View<br />
Client Script.<br />
9. Agregue el código siguiente al evento Button1 onclick:<br />
10. 'Bind the chart to the recordset.<br />
11. Dim c<br />
12. Set c = Chchartspace1.Constants<br />
13. Chchartspace1.ConnectionString = "Provider=MSPersist"<br />
14. Chchartspace1.CommandText =<br />
"http://YourWebServer/ChartDemo1/MakeData.aspx"<br />
15. Chchartspace1.HasMultipleCharts = False<br />
16. Chchartspace1.PlotAllAggregates = c.chPlotAggregatesSeries<br />
17. Chchartspace1.SetData c.chDimCategories, c.chDataBound, "LastName"<br />
Chchartspace1.SetData c.chDimValues, c.chDataBound, "OrderTotal"<br />
NOTA: SuServidorWeb de cambio en la dirección URL al nombre de su servidor Web.<br />
18. En el menú Archivo, haga clic en Save Default.htm.<br />
19. Siga estos pasos para probar la solución:
1. Inicie Internet Explorer y vaya a /ChartDemo1/Default.htm SuServidorWeb http://<br />
(donde es SuServidorWeb el nombre de su servidor Web.)<br />
2. Haga clic en Make Chart. Observe que un gráfico de columnas con datos del<br />
DataSet aparece.<br />
Utilice datos literales<br />
Esta solución describe forma, forma de generar datos literales de un DataSet en la forma y utiliza<br />
a continuación aquel dato literal para crear un gráfico. Esta solución utiliza un Web Form de<br />
<strong>ASP</strong>.<strong>NET</strong>. Ejecutar código servidor genera un DataSet un control de servidor PlaceHolder se<br />
utiliza para la isla de datos y devuelve el DataSet al cliente como una isla de datos XML. La<br />
secuencia de comandos en cliente atraviesa los nodos en la isla de datos para crear matrices<br />
para las categorías y los valores que se utilizan para crear el gráfico.<br />
1. Visual Basic mediante <strong>ASP</strong>.<strong>NET</strong> crea un proyecto nuevo de aplicación Web denominado<br />
ChartDemo2. Webform1.aspx se crea de forma predeterminada y vista Diseño<br />
muestra.<br />
2. Haga clic en WebForm1 y a continuación, haga clic en Ver código fuente HTML.<br />
3. Reemplace el elemento siguiente<br />
4. <br />
<br />
Con siguiente:<br />
<br />
<br />
<br />
<br />
Chart Data<br />
<br />
Function Mybtn_OnClick
'Extract the contents of the XML Data island and insert it into two<br />
'arrays: one array for the chart categories and one array for the<br />
'chart values.<br />
Dim nCount, nodes, i<br />
Set nodes = dsXML.XMLDocument.childNodes.item(0).childNodes<br />
nCount = nodes.length<br />
Redim aNames(nCount)<br />
Redim aTotals(nCount)<br />
For i=1 to nCount<br />
aNames(i) = nodes.item(i-1).ChildNodes.item(0).text<br />
aTotals(i) = nodes.item(i-1).ChildNodes.item(1).text<br />
Next<br />
'Create a chart from the array data.<br />
'Bind the chart to the recordset.<br />
Dim c<br />
Set c = CSpace.Constants<br />
Dim oChart, oSer<br />
CSpace.Clear<br />
Set oChart = CSpace.Charts.Add<br />
Set oSer = oChart.SeriesCollection.Add<br />
oSer.SetData c.chDimCategories, c.chDataLiteral, aNames<br />
oSer.SetData c.chDimValues, c.chDataLiteral, aTotals<br />
End Function<br />
<br />
5. En el menú Ver, haga clic en Diseño para volver a vista Diseño.
6. En el menú Ver, haga clic en Código para ver el código situado detrás del formulario<br />
Web Forms (Webform1.aspx.vb).<br />
7. Agregue el código siguiente al principio de Webform1.aspx.vb:<br />
8. Imports System.Data.SqlClient<br />
9. Imports System.Xml<br />
Imports System.Xml.Xsl<br />
10. Agregue el código siguiente a la función Page Load en Webform1.aspx.vb.<br />
Nota Debe cambiar Id. de usuario y contraseña = a los valores correctos antes de ejecutar este código. Asegúrese de que Id. de<br />
usuario tiene los permisos apropiados realizar esta operación en la base de datos.<br />
11. Dim sConn As String = "User ID=;Password=;Initial Catalog=Northwind;Data Source=YourSQLServer;"<br />
12. Dim sSQL As String = _<br />
13. "SELECT LastName, Sum([UnitPrice]*[Quantity]*(1-[Discount])) AS<br />
OrderTotal " & _<br />
14. "FROM Employees INNER JOIN (Orders INNER JOIN [Order Details] ON<br />
" & _<br />
15. "Orders.OrderID = [Order Details].OrderID) ON Employees.EmployeeID =<br />
" & _<br />
16. "Orders.EmployeeID GROUP BY LastName"<br />
17.<br />
18. 'Connect to the data source.<br />
19. Dim nwindConn As SqlConnection = New SqlConnection(sConn)<br />
20. nwindConn.Open()<br />
21.<br />
22. 'Build a DataSet for Employee Sales.<br />
23. Dim ds As DataSet<br />
24. ds = New DataSet("MyDataset")<br />
25. Dim da As SqlDataAdapter = New SqlDataAdapter(sSQL, nwindConn)<br />
26. da.Fill(ds)<br />
27.<br />
28. 'Add the DataSet as XML to a data island in the PlaceHolder control.
29. Dim sw As System.IO.StringWriter = New System.IO.StringWriter()<br />
30. ds.WriteXml(sw)<br />
31. Dim lc As LiteralControl = New LiteralControl( _<br />
32. "" & sw.ToString & "")<br />
PlaceHolder1.Controls.Add(lc)<br />
NOTA: En el código, se cambia la cadena de conexión en sConn a una cadena de<br />
conexión válida de un equipo que ejecuta SQL Server y que contiene la base de datos<br />
de ejemplo Neptuno.<br />
33. Siga estos pasos para probar la aplicación Web:<br />
1. Presione F5 para generar y ejecutar la aplicación. Aplicación Web se carga en<br />
Internet Explorer.<br />
2. En el menú Ver en Internet Explorer, haga clic en Ver código fuente. Nota un<br />
dato XML isla con el identificador "dsXML" existe en el código fuente HTML; la<br />
isla de datos fue generada por el código en el evento Page Load del formulario<br />
Web Forms.<br />
3. Haga clic en el formulario de Web en Chart Data para que genere el gráfico a<br />
partir de los datos en la isla de datos XML.<br />
Consideraciones<br />
Puede crear y utiliza objetos Recordset de ADO en el .<strong>NET</strong> Framework a través de la capa de<br />
interoperabilidad de COM. Es si utiliza objetos Recordset de ADO o DataSets de ADO.<strong>NET</strong><br />
para su solución una opción de diseño. Si tiene código existente que crea DataSets y si desea<br />
agregar funcionalidad que se representa, puede utilizar una de las soluciones que se tratan en<br />
este artículo. Sin embargo, si tiene acceso a datos en sólo para crearlos en gráficos, Microsoft<br />
recomienda utilizar ADO a través de interoperabilidad COM para poder enlazar directamente a<br />
los datos sin conversión.