04.02.2014 Views

(OWC) y ASP.NET - Willy .Net

(OWC) y ASP.NET - Willy .Net

(OWC) y ASP.NET - Willy .Net

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!