更高技术的网页
asp.net的一些控件远比html控件要更加智能化。其中之一就是日历(calendar)控件。
以下代码是calendar.aspx中的一部分。代码提供二种方法让控件设置日期:
浏览日历然后选择日期;
按照日期格式输入日期,确认选择。这种方法由.net的convert类支持。
<script language=”delphi” runat=”server”>
procedure calendar1selected(sender: system.object; e: eventargs);
begin
label1.text := delphi for .net says you picked + calendar1.selecteddate.tostring(d);
end;
procedure button1click(sender: system.object; e:eventargs);
begin
calendar1.visibledate := system.convert.todatetime(edit1.text);
label1.text := delphi for .net says you set + calendar1.visibledate.tostring(d);
end;
</script>
<body style=”font:18pt verdana”>
<form runat=”server”>
<center>
<h1>delphi for .net running in asp.net</h1>
<p>please pick a date</p>
<asp:calendar id=”calendar1″ runat=”server” forecolor=”#0000ff” backcolor=”#ffffcc”
onselectionchanged=”calendar1selected”>
<todaydaystyle font-bold=”true”/>
<nextprevstyle forecolor=”#ffffcc”/>
<dayheaderstyle backcolor=”#ffcc66″/>
<selecteddaystyle forecolor=”black” backcolor=”#ccccff”/>
<titlestyle font-size=”14pt” font-bold=”true” forecolor=”#ffffcc” backcolor=”#990000″/>
<othermonthdaystyle forecolor=”#cc9966″/>
</asp:calendar>
<p><asp:textbox id=”edit1″ width=200 runat=”server”/>
<asp:button text=”set date” id=”button1″ onclick=”button1click” runat=”server” />
</p>
<p><asp:label id=”label1″ runat=”server”/></p>
</center>
</form>
</body>
在日历上选择日期触发onselectionchanged事件,调用delphi的calendar1selected()过程。
输入日期,点击”set data”按钮触发button1click事件,调用delphi的button1click()过程。
数据处理
现在通过日历的日期选择来选择显示数据库数据。在这个asp.net delphi网页上,增加一个datagrid和一个textbox,前者显示数据库数据,后者输入要显示的数据库域。
<%@import namespace=”system.data”%>
<%@import namespace=”system.data.sqlclient”%>
<script language=”delphi” runat=”server”>
const
prodname = delphi for .net;
dispfields = orderid, customerid, shipname, shipcity, shipcountry;
procedure dateselected(sender: system.object; e: eventargs);
begin
label1.text := prodname + says you picked + calendar1.selecteddate.tostring(d);
datagrid1.datasource := getorders(calendar1.selecteddate);
datagrid1.databind;
end;
procedure button1click(sender: system.object; e:eventargs);
begin
calendar1.visibledate := system.convert.todatetime(edit1.text);
label1.text := prodname + says you set + calendar1.visibledate.tostring(d);
end;
procedure button2click(sender: system.object; e:eventargs);
begin
displayfields.text := dispfields;
end;
function getorders(date : datetime) : dataset;
var
adapter : sqldataadapter;
begin
adapter := sqldataadapter.create(
select + displayfields.text + from orders +
where orderdate = + date.tostring(d)+,
server=(local);database=northwind;trusted_connection=yes);
result := dataset.create;
adapter.fill(result);
end;
</script>
<body style=”font:18pt verdana”>
<form runat=”server”>
<h1><%=prodname %> with a calendar, datagrid, & sqlclient in asp.net</h1>
<table>
<tr valign=”top”><td>
<p><b>pick a date</b></p>
<asp:calendar id=”calendar1″ runat=”server” forecolor=”#0000ff” backcolor=”#ffffcc”
onselectionchanged=”dateselected”>
<todaydaystyle font-bold=”true”/>
<nextprevstyle forecolor=”#ffffcc”/>
<dayheaderstyle backcolor=”#ffcc66″/>
<selecteddaystyle forecolor=”black” backcolor=”#ccccff”/>
<titlestyle font-size=”14pt” font-bold=”true” forecolor=”#ffffcc” backcolor=”#990000″/>
<othermonthdaystyle forecolor=”#cc9966″/>
</asp:calendar>
<p><asp:textbox id=”edit1″ width=150 runat=”server”/>
<asp:button text=”set date” id=”button1″ onclick=”button1click” runat=”server” />
</p>
</td><td valign=”top”>
<p><b>display fields:</b> <asp:textbox id=”displayfields”
text=”orderid, customerid, shipname, shipcity, shipcountry” width=500 runat=”server”/>
<asp:button text=”reset fields” id=”button2″ onclick=”button2click” runat=”server” /></p>
<asp:datagrid id=”datagrid1″ runat=”server” bordercolor=”#ffcc66″ forecolor=”#0000ff”>
<headerstyle forecolor=”#ffffcc” backcolor=”#990000″/>
</asp:datagrid>
</td></tr></table>
<p><asp:label id=”label1″ runat=”server”/></p>
</form>
</body>
每当用户点击日历选择日期时,就触发onselectionchanged事件,调用dateselected()函数。
在getorders函数中,数据库的连接由命名空间定义的sqlclient实现,数据库是ms sql 2000的示范库northwind。sqldataadapter将查询结果安装到datagrid中,显示出数据表格,如附图。
改变域输入框的域名,再点击日历,就得到不同的结果。
这就是日历驱动的数据库查询系统,由delphi for .net与asp.net共同完成。
结语
本文试图简略说明在asp.net中应用delphi是如何方便。
请记住,本文示例是delphi 7的预览示例,正式版本的结果也许不完全如此,当然也许就是如此。