Delphi 7前瞻:将Delphi作为ASP.NET的脚本语言(下)

更高技术的网页
ASP.NET的一些控件远比HTML控件要更加智能化。其中之一就是日历(Calendar)控件。

以下代码是calendar.aspx中的一部分。代码提供二种方法让控件设置日期:
浏览日历然后选择日期;
按照日期格式输入日期,确认选择。这种方法由.NET的Convert类支持。

 1<script language="Delphi" runat="server">   
 2procedure Calendar1Selected(Sender: System.Object; E: EventArgs);   
 3begin   
 4Label1.Text := 'Delphi for .NET says you picked ' + Calendar1.SelectedDate.ToString('D');   
 5end; 
 6
 7procedure Button1Click(Sender: System.Object; E:EventArgs);   
 8begin   
 9Calendar1.VisibleDate := System.Convert.ToDateTime(Edit1.Text);   
10Label1.Text := 'Delphi for .NET says you set ' + Calendar1.VisibleDate.ToString('D');   
11end;   
12</script>
 1<body style="font:18pt Verdana">
 2<form runat="server">
 3<center>
 4<h1>Delphi for .NET running in ASP.NET</h1>
 5<p>Please pick a date</p>
 6<asp:calendar backcolor="#FFFFCC" forecolor="#0000FF" id="Calendar1" onselectionchanged="Calendar1Selected" runat="server">
 7<todaydaystyle font-bold="True"></todaydaystyle>
 8<nextprevstyle forecolor="#FFFFCC"></nextprevstyle>
 9<dayheaderstyle backcolor="#FFCC66"></dayheaderstyle>
10<selecteddaystyle backcolor="#CCCCFF" forecolor="Black"></selecteddaystyle>
11<titlestyle backcolor="#990000" font-bold="True" font-size="14pt" forecolor="#FFFFCC"></titlestyle>
12<othermonthdaystyle forecolor="#CC9966"></othermonthdaystyle>
13</asp:calendar>
14<p><asp:textbox id="Edit1" runat="server" width="200"></asp:textbox>
15<asp:button id="Button1" onclick="Button1Click" runat="server" text="Set date"></asp:button>
16</p>
17<p><asp:label id="Label1" runat="server"></asp:label></p>
18</center>
19</form>
20</body>

在日历上选择日期触发OnSelectionChanged事件,调用Delphi的Calendar1Selected()过程。
输入日期,点击"Set data"按钮触发Button1Click事件,调用Delphi的Button1Click()过程。

数据处理
现在通过日历的日期选择来选择显示数据库数据。在这个ASP.NET Delphi网页上,增加一个DataGrid和一个TextBox,前者显示数据库数据,后者输入要显示的数据库域。

< %@Import Namespace="System.Data"%>
< %@Import Namespace="System.Data.SqlClient"%>

 1<script language="Delphi" runat="server">   
 2const   
 3ProdName = 'Delphi for .NET';   
 4DispFields = 'OrderID, CustomerID, ShipName, ShipCity, ShipCountry'; 
 5
 6procedure DateSelected(Sender: System.Object; E: EventArgs);   
 7begin   
 8Label1.Text := ProdName + ' says you picked ' + Calendar1.SelectedDate.ToString('D');   
 9DataGrid1.DataSource := GetOrders(Calendar1.SelectedDate);   
10DataGrid1.DataBind;   
11end; 
12
13procedure Button1Click(Sender: System.Object; E:EventArgs);   
14begin   
15Calendar1.VisibleDate := System.Convert.ToDateTime(Edit1.Text);   
16Label1.Text := ProdName + ' says you set ' + Calendar1.VisibleDate.ToString('D');   
17end; 
18
19procedure Button2Click(Sender: System.Object; E:EventArgs);   
20begin   
21DisplayFields.Text := DispFields;   
22end; 
23
24function GetOrders(Date : DateTime) : DataSet;   
25var   
26Adapter : SqlDataAdapter;   
27begin   
28Adapter := SqlDataAdapter.Create(   
29'select ' + DisplayFields.Text + ' from Orders '+   
30'where OrderDate = ''' + date.ToString('d')+'''',   
31'Server=(local);Database=Northwind;Trusted_Connection=yes');   
32Result := DataSet.Create;   
33Adapter.Fill(Result);   
34end; 
35
36</script>
 1<body style="font:18pt Verdana">
 2<form runat="server">
 3<h1>```
 4=ProdName 
 5``` with a Calendar, DataGrid, &amp; SqlClient in ASP.NET</h1>
 6<table>
 7<tr valign="top"><td>
 8<p><b>Pick a date</b></p>
 9<asp:calendar backcolor="#FFFFCC" forecolor="#0000FF" id="Calendar1" onselectionchanged="DateSelected" runat="server">
10<todaydaystyle font-bold="True"></todaydaystyle>
11<nextprevstyle forecolor="#FFFFCC"></nextprevstyle>
12<dayheaderstyle backcolor="#FFCC66"></dayheaderstyle>
13<selecteddaystyle backcolor="#CCCCFF" forecolor="Black"></selecteddaystyle>
14<titlestyle backcolor="#990000" font-bold="True" font-size="14pt" forecolor="#FFFFCC"></titlestyle>
15<othermonthdaystyle forecolor="#CC9966"></othermonthdaystyle>
16</asp:calendar>
17<p><asp:textbox id="Edit1" runat="server" width="150"></asp:textbox>
18<asp:button id="Button1" onclick="Button1Click" runat="server" text="Set date"></asp:button>
19</p>
20</td><td valign="top">
21<p><b>Display fields:</b> <asp:textbox id="DisplayFields" runat="server" text="OrderID, CustomerID, ShipName, ShipCity, ShipCountry" width="500"></asp:textbox>
22<asp:button id="Button2" onclick="Button2Click" runat="server" text="Reset fields"></asp:button></p>
23<asp:datagrid bordercolor="#FFCC66" forecolor="#0000FF" id="DataGrid1" runat="server">
24<headerstyle backcolor="#990000" forecolor="#FFFFCC"></headerstyle>
25</asp:datagrid>
26</td></tr></table>
27<p><asp:label id="Label1" runat="server"></asp:label></p>
28</form>
29</body>

每当用户点击日历选择日期时,就触发OnSelectionChanged事件,调用DateSelected()函数。
在GetOrders函数中,数据库的连接由命名空间定义的SqlClient实现,数据库是MS SQL 2000的示范库Northwind。SqlDataAdapter将查询结果安装到DataGrid中,显示出数据表格,如附图。

改变域输入框的域名,再点击日历,就得到不同的结果。

这就是日历驱动的数据库查询系统,由Delphi for .NET与ASP.NET共同完成。

结语
本文试图简略说明在ASP.NET中应用Delphi是如何方便。
请记住,本文示例是Delphi 7的预览示例,正式版本的结果也许不完全如此,当然也许就是如此。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus