DW+ASP.Net实战

熟悉DW开发ASP.Net:

0。导言。
  自从dreamweaverMX(下文称做DW)面世以来,就集成了UltraDev的所有功能并增强。而且MX版本的软件直接支持ASP、PHP、JSP和ASP.net的自主开发,如果你不是特别专业的.net人员,如果你偏重的是页面设计,同时你又需要原创的程序时,那我就推荐你使用功能强大的DreamWeaverMX来帮助你完成整个站点的设计。在这里,我想讲的便是,我在开发一个个人网站以后对其ASP.net的开发的一些经验,希望对2yup的朋友们有些帮助。
  说到这里有些朋友要问了,dw生成的代码可靠么?DW里面不存在Injection问题么?其实dw中的数据库项目所涉及到的服务器端的的方法属性调用都是基于Dw自行封装的dreamweaverCtrls.Dll组件,它将自动生成(部署)到项目根目录下(需要手动创建bin文件夹),方便我们调用。值得一提的是,dw里面可视化的拖拽编程模式和自带的dll中丰富的方法属性,给我们的编程带来了极大多方便,同时比asp时代有着更高的安全性;另外,从参数的使用角度上说,在自动生成的.net代码里面,已经成功地解决了Injection问题。其他的安全问题,呵呵,我反编译了他这个组件,不过还没找到BUG,呵呵~~~其他兄弟加油了~~另外,你还可以在页面中混合加入例如<script runat="server">的代码,在页面初始化时,执行以些你自定义的动作(如果多次操作数据库生成DataTable的话,有可能造成服务性能的下降哦~~)。好了,闲话不说,我们切入正题。
1。dreamweaverCtrls.Dll简介
  dreamweaverCtrls.Dll在DW_2004中的版本是1.0.0.5,将会被部署到项目根目录的bin文件夹下面。dw中丰富的方法属性,将数据链接、数据显示、数据更新、数据删除等变得简单易行,全部集成到了这里面,已备我们方便调用。比如我们要创建一个数据集,只需要声明<dataset>标签即可,然后就可以调用了~~,我们将会陆续用到:<MM:DataSet> <MM:Up&#100;ate> <MM:Del&#101;te> <MM:Ins&#101;rt>等控件。有了这些dreamweaverCtrls.dll这个组建提供的这一切,让我们数据的编程变的简单易行~~dreamweaverCtrls.dll这个组件的其他一些参数,大家可自行反编译(不果如果不是研究BUG的话没这个必要,我们只需要知道他基于数据库的用法即可) 点击这里下载这个组件。
2。DW生成站点项目  打开DW软件,在右侧操作栏里面选择“文件”-->“管理站点”-->“新建站点”[注意:这里的站点并不是所谓的IIS的站点,这里的站点指的是一个方便管理的目录,如果需要真正的将其变为一个站点,还需要在IIS里面手动建立一个IIS的虚拟目录,比如我建立的虚拟目录的名字是 “dw.net”。虚拟目录(或站点)的存在是用户DLL文件能够成功读取的前提]

  在这里我们按照自己的要求新建一个站点dw.net。偶用的是C#版本所以选择使用服务器技术、ASP.net C#
  然后下一步进入选择你的站点原文件目录,选择你的目录点击“下一步”,然后配置好用http的访问路径,我的是“http://localhost/dw.net/”  进行测试,如果弹出对话框说“URL前缀测试成功”说明一切OK,然后一路狂奔“下一步”直至“完成”。
  好的,到此为止,我们在DW中已经成功地创建了一个ASP.Net C#站点。以后我们就可以方便的在这个站点中创建我们的各种服务文件和DLL控件。
3。DW与数据库的连接
  现在我们就以ACCESS数据库来显示一个新闻数据来演示我们的数据库链接。
  创建一个news.mdb数据库 有一个news表,表里面有有id title addTime 和 content 四个字段。(数据内容自行添加)数据库存放在dw.net的根目录地下
  打开DW新建一个页面“shownews.aspx” 在dw.net根目录下
  切换到原代码试图,我们会发现DW在文件的最上端自动加注了我们文件类型的一句:<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
  接下来,要建立与数据库的连接,我们必须部署前面我们提到的“dreamweaverCtrls.dll”这个组件到dw.net根目录的bin文件夹(如果没有可以自行建立此文件夹)。然后在右侧操作栏里

面选择“应用程序”面板,然后选择“服务器行为”找到“部署”链接 并点击“部署”,找到bin文件夹,点击确定完成。这样,这个组件便被我们成功地部署到了bin文件夹中,我们可以到相应目录去浏览。
  然后,选择“插入”-->“应用程序对象”-->“数据集”。在“数据集”对话框中填写数据集的“名称”,然后定义链接,点击“定义”,然后选择“新建”-->“OLE DB链接”,填写链接的名字(我的是conn),然后再内容框里面输入链接代码,下面是我的代码
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\dw.net\news.mdb;Persist Security Info=False

然后点击“测试”如果成功,点击“确定”然后点击“完成”即可返回数据集页面,这样数据库链接即建立成功。或者在建立数据库链接的时候,可以采用OLE DB面板上的“建立标签”,让向导帮助你完成数据库的链接,而不用自己输入代码  
返回到“数据集”对话框后,在“连接”中选择我们刚刚建立的"conn",在“表格”种选择“news”,“列”我们可以简单的选择“全部”,其他的项目可以暂时不管,点击“测试”,如果成功将数据表“news”中的数据读出,那么即可以点击“确定”完成数据集的建立,那么,我们就成功地建立了数据集DataSet1。

到目前为止,我们真正的有了一些成就(又两个根本性的变化):
1。在dw.net的根目录自动已经自动生成了一个web.config配置文件,里面记录了我们的一些链接数据库的信息。我们可以用记事本打开查看,内容如下:

<configuration>
  <appSettings>
    <add key="MM_CONNECTION_HANDLER_conn" value="default_oledb.htm" />
    <add key="MM_CONNECTION_STRING_conn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\dw.net\news.mdb;Persist Security Info=False" />
    <add key="MM_CONNECTION_DATABASETYPE_conn" value="OleDb" />
    <add key="MM_CONNECTION_SCHEMA_conn" value="" />
    <add key="MM_CONNECTION_CATALOG_conn" value="" />
  </appSettings>
</configuration>


呵呵,意思很简单,大家一看就会阿~~

2。这个变化更显而易见,在操作栏的“应用程序”面板的“绑定”面板,会发现多了一个“conn”的数据集dataset1,展开数据集dataset1,会发现数据表news中的字段便在其中。这些字段将来就可以用作我们显示数据。从源代码分析,之所以会郑家这么一个数据集的试图,在源代码中增加了这么几句:

代码:
<%@ Register TagPrefix="MM" Namespace="DreamweaverCtrls" Assembly="DreamweaverCtrls,version=1.0.0.0,publicKeyToken=836f606ede05d46a,culture=neutral" %>
<MM:DataSet
id="DataSet1"
runat="Server"
IsStoredProcedure="false"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
CommandText="<%# "Sel&#101;ct * FROM news" %>"
Debug="true"
></MM:DataSet>
<MM:PageBind runat="server" PostBackBind="true" />



我来简单的解释一下这几句话:
1。Register这一句是注册“DreamweaverCtrls”这个组件,有DW自动生成。
2。MM:DataSet标签,这便是DW生成的数据表的用户控件。里面包含几个属性参数:
  ConnectionString为从web.config中创建链接字符串
  DatabaseType为数据库链接类型字符串,同样取自web.config中
  CommandText为sql字符串,就是所谓的命令字段,去执行sql查询
  Debug为错误检查, 如果设置的值为“true”当运行时有错误产生时,会产生错误的原因,而不是仅仅提示错误。
3。MM:PageBind 标签。学过.net的朋友都知道,在Page_Load()事件中往往在布什IsPostBack时,来一个DataBind()方法。这个标签实际上就是这个意思
  PostBackBind属性设为“true”后,在Page_Load()时无条件执行DataBind()。

呵呵,解释完了,最激动人心的一刻来了,让我们显示数据:
在右侧操作栏的“应用程序”面板中选择“服务器行为”标签。在上面点击“+”号,在弹出的菜单中选择“动态文本”
在谈出的对话框中选择“conn”里面的“title”然后单击确定。这样title便被添加到了页面当中。
反复这样操作,直到将三个数据都添加到页面中去。
然后调整三个数据在文中的位置,让他像一篇文章的格式,然后 呵呵 保存此文档~~
大功告成了~~~进入浏览器测试一下:http://localhost/dw.net/sh... 看看数据是否被读出?如果读出,好的,那我今天这三个小时没白写呵呵
此外,还可以直接切换到DW的“活动数据试图”进行测试,同样可以测试成功~~
在操作的过程中有几点是必须要注意的:
1。必须建立站点或者虚拟目录,否则无法运行DW自带的组件
2。必须正确部署组件:根目录的Bin文件夹中
3。数据库连接一定要正确……
当然还要注意其他一些小细节,确保文档成功~~
呵呵,总而言之,用DW来编写asp.net确实比较容易,但也不能掉以轻心,因为里面的好东东好方法还很多,还要靠你自己去慢慢理会~~呵呵

DW+ASP.Net实战(二):数据的循环显示

4。数据的循环显示。
  前一天我们说了DW与数据库的链接方法,在这里补充一下:在.net里面,数据链接住要有这么几种方式:SqlDataConnection、OleDbDataConnection、OdbcDataConnection三种,然后进行链接的构建,但在asp.net2.0例面,这些就改变了,连数据链接只需要标注一个控件即可完成,很是简单,呵呵,我发现微软公司要把我们程序员培养成纯粹的思维机器人了哈哈)。

SqlDataConnection是sqlServer专用的,OleDbDataConnection是通用的,呵呵, 不过如果是sql server的话,用OleDbDataConnection效率会受影响哦~~,那Odbc我就不说了,呼呼
  我们在这里用的就是比较通用的OleDbDataConnection来链接数据库,它既可以显示ACCESS数据库又可以链接SqlServer数据库,对应的代码如下:
  For Access:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\dw.net\news.mdb;Persist Security Info=False

For MS SqlServer
PROVIDER=SQLOLEDB;DATA SOURCE=(local);UID=sa;PWD=;DATABASE=hotide;connect timeout=120;

  嗯,然后再按照前一天的东东就可以随心所欲链接拉,呵呵  现在,让我们开始说说循环显示数据。
  在.net面,最牛X的数据显示控件就可以说是DataGrid了。只要一个标签,和一些属性,数据就可以让你为所欲为。另外还有的主要控件就是DataList和Repeater了。按照效率来比较:DataGrid>DataList>Repeater,但是在方便程度上讲 这三个控件有时候又可以反过来排序,因为Repeater控件的逻辑往往和以前的ASP3.0中的do……while循环显示有很大的雷同之处,方便我们的思维。
  还是利用前一天的数据 还是利用前一天的文件。让我们来分别演示这三种方法:
  <1>。DataGrid
    让我们首先将昨天在showNews.aspx中添加的三个动态数据删除掉,做好准备。然后在右侧的操作栏里面选择“服务器行为”面板,然后选择“+”号。在弹出的对话框中选择“数据网格”,然后会弹出“数据网格”对话框。
    ID保持默认即可;数据集选择我们昨天建立的“DataSet1”;显示数据方式你可以自由选择,比如说显示所有记录和或者分页显示数据,在这里我们选择每页显示10条记录,导航选择“编号链接到每一页”;在列中可以添加或者删除你需要或者不需要的列,还可以调整每一列的格式,编辑标题的名字等等!在这里我们简便起见保持默认,然后单击“确定”完成DataGrid1的部署,这样一个DataGrid控件就被部署到了叶面上。我们可以在源代码里看到:
<form runat="server">
  <asp:DataGrid id="DataGrid1"
  runat="server"
  AllowSorting="False"
  AutoGenerateColumns="false"
  CellPadding="3"
  CellSpacing="0"
  ShowFooter="false"
  ShowHeader="true"
  DataSource="<%# DataSet1.DefaultView %>"
  PagerStyle-Mode="NumericPages"
  AllowPaging="true"
  AllowCustomPaging="true"
  PageSize="<%# DataSet1.PageSize %>"
  VirtualItemCount="<%# DataSet1.RecordCount %>"
  OnPageIndexChanged="DataSet1.OnDataGridPageIndexChanged"
>
    <HeaderStyle HorizontalAlign="center" BackColor="#E8EBFD" ForeColor="#3D3DB6" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Bold="true" Font-Size="smaller" />
    <ItemStyle BackColor="#F2F2F2" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Size="smaller" />
    <Alt&#101;rnatingItemStyle BackColor="#E5E5E5" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Size="smaller" />
    <FooterStyle HorizontalAlign="center" BackColor="#E8EBFD" ForeColor="#3D3DB6" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Bold="true" Font-Size="smaller" />
    <PagerStyle BackColor="white" Font-Name="Verdana, Arial, Helvetica, sans-serif" Font-Size="smaller" />
    <Columns>
    <asp:BoundColumn DataField="title"
        HeaderText="title"
        ReadOnly="true"
        Visible="True"/>
    <asp:BoundColumn DataField="content"
        HeaderText="content"
        ReadOnly="true"
        Visible="True"/>
    <asp:BoundColumn DataField="addTime"
        HeaderText="addTime"
        ReadOnly="true"
        Visible="True"/>
    </Columns>
  </asp:DataGrid>
</form>


代码读起来并不困难,而且都是DW自动生成的代码,我不再解释,大家自己研究阿
然后在浏览器里面预览一下,呵呵,数据被显示出来了吧  

  <2>。DataList
    让我们首先将刚刚在showNews.aspx中添加的DataGrid1控件删除掉,做好准备。然后在右侧的操作栏里面选择“服务器行为”面板,然后选择“+”号。在弹出的对话框中选择“数据列表”,然后会弹出“数据网格”对话框。
    ID保持默认即可;数据集选择我们昨天建立的“DataList1”;显示数据方式我们选择显示10条记录,分别单击页眉、项目(其他的我们省略不写)并相应的“将数据字段添加到内容”在选择“页眉”后在“内容”中输入“新闻列表”;在选择“项目”后在“内容”中输入“<%# DataSet1.FieldValue("title", Container) %><%# DataSet1.FieldValue("addTime", Container) %>”(当然可以通过“将数据字段添加到内容”选项帮助我们自动添加)“组织项”我们简便起见保持默认,然后单击“确定”完成DataSet1的部署,这样一个DataSet控件就被部署到了叶面上。我们可以在源代码里看到:
<form runat="server">
  <asp:DataList id="DataList1"
runat="server"
RepeatColumns="1"
RepeatDirection="Vertical"
RepeatLayout="Flow"
DataSource="<%# DataSet1.DefaultView %>" >
    <HeaderTemplate>新闻列表 </HeaderTemplate>
    <ItemTemplate><%# DataSet1.FieldValue("title", Container) %> <%# DataSet1.FieldValue("addTime", Container) %> </ItemTemplate>
  </asp:DataList>
</form>

  
恩,乍看起来,这个比DataGrid东西少,呵呵就是,不过不要掉以轻心哦,里面还有好多深奥的东东呢!
让我们赶紧浏览一下数据吧,怎么样?是不是有了网站“新闻列表”的风格了,呵呵。
说到这里,是不是有点累了?不过千万别打瞌睡,好戏就要上演了,让我们仔细研究一下这个“Repeater”控件 ;

  <3>。Repeater
    没有接触过.net的朋友听了上面两个控件肯定有点迷茫,但Repeater就不一样了!在说Repeater以前,让我们一起回忆一下在以前的ASP中我们如何来显示循环的数据:
<%
  ""--Code designed by ReTech_DDP_Soft : zidone chang  For ASP3.0
  ""--前面需要创建记录集rs
  while not rs.eof
    Response.Write(rs("title")&amp;"&amp;nbsp;&amp;nbs;"&amp;rs("addTime"))
    rs.MoveNext
  wend
%>


  显示数据的精华是: 只要不到记录集的Eof那么我们将不断的用while循环去读取数据记录,从而显示。
  而在ASP.net Repeater控件中,我们仿佛也看到了这种模式的影子:

<ASP:Repeater runat="server" DataSource="<%# DataSet1.DefaultView %>">
  <ItemTemplate><%# DataSet1.FieldValue("title", Container) %><%# DataSet1.FieldValue("addTime", Container) %><br>
  </ItemTemplate>
</ASP:Repeater>



  1> DataSource属性给我们定义了使用哪个数据集,就像ASP中我们定义rs数据集(rs.Open sql,conn,1,1)一样
  2> <ASP:Repeater runat="server" DataSource="<%# DataSet1.DefaultView%>">这句话,看起来好像就是ASP中的<%while not rs.eof%>这句话。
  3> </ASP:Repeater>这句话好像就是 在ASP中的<%rs.MoveNext:wend%>
  4> <ItemTemplate></ItemTemplate>之间我们就可以来写需要重复显示的东西啦~~~就像ASP里面的:<%Response.Write("xxxxx")%>一样,里面可以放置任何形式的HTML代码~~
  5> 不知道大家有没有注意到<%# DataSet1.FieldValue("title", Container) %>这个代码,好像似曾相识吧!呵呵,就是的,前一天中我们的显示数据库内容中用到的“动态文本”概念,
也就是DataSet1的一个字段值,并将其显示出来~~,开动脑筋~~想一想哦~是不是就像在ASP中的<%=Rs("title")%>呢~~~
  呵呵,说到这里是不是有点感觉了~~

  下面我们就动手亲自来操作一下:
  1> “在服务器行为”面板,选择“+”号,在弹出的对话框中选择“动态文本”然后分别将“id”“title”和“addTime”三个字段添加进叶面。好的确定。在叶面addTime字段的后面添加一个水平线,用来数据换行,然后选中要重复的区域(要把水平线一起选中,否则重复的数据将会在一行中全部显示出来)然后再点击服务器行为面板的“+”号,选择“重复区域”,选择“数据集”为“DataSet1”显示“10”条数据,然后确定。保存文档。进行浏览器中预览!
  2> 这就是用Repeater进行数据循环显示的方法,当前状态可以显示10条,当然你需要更改<ItemTemplate>中的代码,让叶面显得更好看~~~
  3> 若数据不能正常输出,注意下面可能的原因:选择重复区域时,注意DataSet的名字一定要选对(对应多DataSet时);还要注意点击“重复区域”前,一定要确保已经选定了要进行重复的内容,切忌哦~~;还有其他的,大家自己去总结吧~~

  总结一下:我们今天说了3种重复区域的方式~~DataGrid、DataList、Repeater。我们比较一下:
  ( a ) 三者DataGrid最好,所支持的属性方法也最丰富,缺点就是深入掌握他们的一些用法比较困难;
  ( b ) DataList处于中间地位,主要用于显示列表,知识一种方法而已,微软的一些官方教程用DataList比较多,偶用的就比较少拉~~;
  ( c ) Repeater说实在的,是我们国人用起来最方便的控件,呵呵,如果不考虑效率的话,如何发挥~~看你自己的了~~
  
  好了,今天就到这里了,希望大家多多支持呀!我才有继续把他写好的信心哦!做个广告先~~明天我们将研究一下,数据更新,添加,删除的方法,不要走开哦~~

DW+ASP.Net实战(三):数据增删改

今天的任务很简单,就是来说一下 数据的插入、更新和删除。
5。数据的维护
在讲数据的维护以前,我们必须保证上一次的循环数据能够正常显示,才能继续今天的课程。
在这里我们用DataGrid作为使用对象。我们准备给我们的DataGrid1控件加两个列,分别是“修改”,“删除”然后再在DataGrid1控件的上面 添加一个Label控件或者直接写“添加新记录”几个字,然后给“添加新记录”作一个超级链接链接到未来我么要设计的“addNews.aspx”,其他的让我们来实际操作一下:
1。让我们将事先做好的DataGrid1控件作一下改动,在左侧操作栏的“服务器行为”面板上找到“数据网格(DataGrid1)”然后双击,会弹出“数据网格”窗口。
2。在“列”的右侧有“+”和“-”,我们单击“+”,然后在弹出的列表中选择“超级链接”。然后“标题”写上“修改”;“超链接文本”选择“静态文本”,后面写上“修改”;“链接页”选择“数据字段”,里面选择“id”(如果数据表中无id字段,请在数据库数据表中自行修改,添加id字段),“格式字符串”里面填写“editNews.aspx?id={0}”,然后点击确定。
3。我们继续单击对话框中的“+”,然后在弹出的列表中选择“超级链接”。然后“标题”写上“删除”;“超链接文本”选择“静态文本”,后面写上“删除”;“链接页”选择“数据字段”,里面选择“id”,“格式字符串”里面填写“delNews.aspx?id={0}”,然后点击确定。
4。在showNews.aspx页面的任何一个位置加下面的代码:
  <a href="addNews.aspx">添加新记录!</a>

或者:
  <asp:HyperLink ID="addNew" NavigateUrl="addNews.aspx" runat="server" Target="_self" Text="添加新记

录!"></asp:HyperLink>

最后保存文档。完成我们的准备工作~~

A> 数据的插入。
  1。创建“addNews.aspx”页面并保存之。
  2。单击工具栏的J“插入”按钮,选择“应用程序对象”并单击之,在弹出的列表中选择“插入记录”并单击之,再次在弹出的N级列表中选择“插入记录表单向导”并单击之。然后会弹出“插入记录表单”窗口。
  3。“连接”选择“conn”;“表格”选择“news”;“如果成功,则转到”填写我们准备好的“showNews.aspx”;表单字段中将“content”的“显示为”改为“文本区域”;“表单字段”中将“id”的“显示为”改为“隐藏域”,其他保持默认,最后单击“确定”退出。
  4。好了,到目前为止,DW已经自动将添加记录的表单添加到了我们的“addNews.aspx”网页之上。让我们分析一下代码:

系统自动添加程序段1(服务器端)

<MM:Ins&#101;rt
runat="server"
CommandText="<%# "Ins&#101;rt INTO news (addTime, content, id, title) VALUES (?, ?, ?, ?)" %>"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["

MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
Expression="<%# Request.Form["MM_ins&#101;rt"] == "form1" %>"
Cr&#101;ateDataSet="false"
Debug="true"
>
  <Parameters>
    <Parameter Name="@addTime" Value="<%# ((Request.Form["addTime"] != null) &amp;&amp; (Request.Form["addTime"].Length > 0)) ? Request.Form["addTime"] : "" %>" Type="Date" />
    <Parameter Name="@content" Value="<%# ((Request.Form["content"] != null) &amp;&amp; (Request.Form["content"].Length > 0)) ? Request.Form["content"] : "" %>" Type="WChar" />
    <Parameter Name="@id" Value="<%# ((Request.Form["theID"] != null) &amp;&amp; (Request.Form["theID"].Length > 0)) ? Request.Form["theID"] : "" %>" Type="Integer" />
    <Parameter Name="@title" Value="<%# ((Request.Form["title"] != null) &amp;&amp; (Request.Form["title"].Length > 0)) ? Request.Form["title"] : "" %>" Type="WChar" />
  </Parameters>
</MM:Ins&#101;rt>



系统自动添加程序段2(客户端)

<form method="post" name="form1" runat="server">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">AddTime:</td>
      <td><asp:textbox id="addTime" TextMode="SingleLine" Columns="32" runat="server" />
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right" valign="top">Content:</td>
      <td><asp:textbox id="content" TextMode="Multiline" Columns="50" Rows="5" runat="server" />
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Title:</td>
      <td><asp:textbox id="title" TextMode="SingleLine" Columns="32" runat="server" />
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&amp;nbsp;</td>
      <td><input type="submit" value="插入记录"></td>
    </tr>
  </table>
  <input type="hidden" name="theID" value="">
  <input type="hidden" name="MM_ins&#101;rt" value="form1">
</form>



简单说明一下:服务器端的代码就是将数据插入到数据库;客户端的代码就是普通的Form表单,用作提交数据。
废话少说,让我们赶紧测试一下,在浏览器中打开addNews.aspx,然后写入一些数据,点击“插入记录”,怎么样,看看数据是不是已经插入到数据库中了呢,呵呵,很简单吧~~

B> 数据修改

  1。创建“editNews.aspx”页面并保存。
  2。按照我们以前讲的方法创建记录集“DataSet1”(用news表,“筛选项”选择“id”,“=”,“url参数”,“id”)
  3。单击工具栏的“插入”按钮,选择“应用程序对象”并单击之,在弹出的列表中选择“更新记录”并单击之,再次在弹出的N级列表中选择“更新记录表单向导”并单击之。然后会弹出“更新记录表单”窗口。
  4。在“更新记录表单”中的“连接”选择“conn”;表格选择“news”;选取记录自“DataSet1”;“唯一键列”选择“id”;“如果成功,则转到”填写“showNews.aspx”;“表单字段”仅将“content”的“显示为”改为“文本区域”即可;最后单击“确定”退出。
  5。好了,到此为止,保存次文档,在浏览器中测试,打开“showNews.aspx”页面,任意单击一个“修改”会进入“editNews.aspx”页面。然后修改一下,最后点击“更新”看看,记录是不是被更新了,呵呵,是不是操作和“插入记录”如出一辙?好好学吧~~
  下面只是将“更新记录”的服务器端代码列举如下,大家可以参考一下哦~~~
<MM:Up&#100;ate
runat="server"
CommandText="<%# "Up&#100;ate news SET content=?, title=?, addTime=? Wh&#101;re id=?" %>"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["

MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
Expression="<%# Request.Form["MM_up&#100;ate"] == "form1" %>"
Cr&#101;ateDataSet="false"
Debug="true"
>
  <Parameters>
    <Parameter Name="@content" Value="<%# ((Request.Form["content"] != null) &amp;&amp; (Request.Form["content"].Length > 0)) ? Request.Form["content"] : "" %>" Type="WChar" />
    <Parameter Name="@title" Value="<%# ((Request.Form["title"] != null) &amp;&amp; (Request.Form["title"].Length > 0)) ? Request.Form["title"] : "" %>" Type="WChar" />
    <Parameter Name="@addTime" Value="<%# ((Request.Form["addTime"] != null) &amp;&amp; (Request.Form["addTime"].Length > 0)) ? Request.Form["addTime"] : "" %>" Type="Date" />
    <Parameter Name="@id" Value="<%# ((Request.Form["theID"] != null) &amp;&amp; (Request.Form["theID"].Length > 0)) ? Request.Form["theID"] : "" %>" Type="Integer" />
  </Parameters>
</MM:Up&#100;ate>
<MM:DataSet
id="DataSet1"
runat="Server"
IsStoredProcedure="false"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
CommandText="<%# "Sel&#101;ct * FROM news Wh&#101;re id = ?" %>"
Debug="true"
>



细心的读者,你能不能在上面的代码中找出点什么?呵呵,如果没有那就该加油了 ~~~~
别急别急,我们接着说我们的“删除数据”呵呵,实际上……

C> 数据删除

  1。创建“delNews.aspx”文件并保存。
  2。单击工具栏的“插入”按钮,选择“应用程序对象”并单击之,在弹出的列表中选择“删除记录”并单击之然后会弹出“删除记录”窗口。
  3。在窗口中“首先检查是否已定义变量”选择“URL参数”后面填写“id”;“连接”选择“conn”;表格选择“news”;“主键列”为“id”;主键值选择“URL参数”后面写id;“如果成功则转到”填写“showNews.aspx”;最后单击“确定”。
  4。保存文档,好了删除记录功能就这么实现了,是不是自己没写一行代码?赶紧测试,如果通过,那么祝贺你,你成功了,如果还有问题,那要继续加油拉!
服务器段代码如下:


<MM:Del&#101;te
runat="server"
CommandText="<%# "Del&#101;te FROM news Wh&#101;re id=?" %>"
ConnectionString="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_STRING_conn"] %>"
DatabaseType="<%# System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_DATABASETYPE_conn"] %>"
Expression="<%# ((Request.QueryString["id"] != null) &amp;&amp; (Request.QueryString["id"].Length > 0)) %>"
Cr&#101;ateDataSet="false"
SuccessURL="<%# "showNews.aspx" %>"
Debug="true"
>
  <Parameters>
    <Parameter Name="@id" Value="<%# ((Request.QueryString["id"] != null) &amp;&amp; (Request.QueryString["id"].Length > 0)) ? Request.QueryString["id"] : "" %>" Type="Integer" />
  </Parameters>
</MM:Del&#101;te>


好了,这一讲到此为止。其实到这里,作一个网站所需要的功能我们就完了,有了这些基本的功能,大家根据自己的一些经验和不断的去摸索,相信能做出不错的站点。
明天我们将介绍一些DW+ASP.Net编程的一些技巧和经验!后天我们将用一个小型系统来总结我们的所有内容,也算给朋友们一个最终的交代。
好了,今天就到这里,明天见!

DW+ASP.Net实战(四):开发中应注意的一些小技巧

今天我们来讨论一下在DW开发ASP.Net中的一些小技巧和方法。
虽然我们在前三篇中已经讲一些基本的操作,但在开发过程中有很多的技巧问题应该值得我们注意,下面我们开始:
1.DataGrid中添加自动编号。
有时候我们的DataGrid列表的第一列来一个自动编号,除了读取数据库的Id字段,是否还有其他方式?答案是肯定的,我们可以通过DataGrid的ItemIndex来实现。众所周知,ItemIndex是DataGrid中记录索引号,也就是从0开始的一个数据,自然能够合理的座位每一行的编号数值,程序段如下:
<Columns>  
                  <asp:TemplateColumn HeaderText="" ItemStyle-Width="50">  
                    <ItemTemplate>  
                        <%# Container.ItemIndex+1 %>  
                    </ItemTemplate>  
                  </asp:TemplateColumn>  
    </Column>

简单介绍一下这个代码:
A>  简单说就是DataGrid的一个模版绑定列。
B>  <%# Container.ItemIndex+1 %>就是显示的Index数据;”+1”的意思是本来ItemIndex从0开始索引,”+1”就是从1开始索引,我们得到的结果就是“1、2、3……Index”呵呵:P

2.数据的截取显示或者替换显示问题问题。
  有时候我们在数据库中的某些数据显示到叶面上时候并不是一些直接的数据:比如性别列中我们用0、1表示男女,在页面中我们必须要显示“男、女”;再比如我们的新闻列表,如果标题过长,我们向截取其中的某一部分来显示等等;当然我们可以根据自己的需要更加灵活自如的制作出自己的效果,废话少说,进入主题:
如果我们数据字段”sex”为”bool”类型,我们想显示出来“男、女”:
<%# (bool)DataSe12.FieldValue("sex", Container) ? "男" : "女" %>

说明一下,(bool)是.net中隐式转换方法;DataSet1.FieldValue("sex",Container)是DW特有的数据绑定格式;用到了三元操作符 “? :”。
如果我们只想显示新闻标题的前20个字符,可以这样做:
<%# DataSet1.FieldValue("title",Container).Length>20 ?DataSet1.FieldValue("title",Container).Substring(0,19)+"…" : DataSet1.FieldValue("title", Container)
%>

说明,同样是小技巧,用Length方法读取绑定字段的长度;用Substring()来截取字符;三元符就是用来判断字符串是否超过20字符~~

3.在ASP.Net中加入JS代码。
由于ASP.Net安全性的考虑不允许直接插入JS代码,我们需要JS时候要采用一些小技巧:
A> 页面加载时直接Alert:
if(!Page.IsStartupScriptRegistered("delAlert"))
            {
              Page.RegisterStartupScript("delAlert",@"<script language="javascript">alert("一些文字");</script>");
            }


*说一下,这段话最好就是放在某一个过程函数中。直接放到Page_Load()事件中也是可以的,呵呵。务必要注意的就是此代码运用的时机。

B>微软通用的属性添加:
实际上.net里面有固有的属性添加方法,就是“控件.Attributes.Add(“事件”,”执行内容”)”。这一属性可以广泛地用在“删除提示”、“错误提示”、“返回提示”等多种场合。举例如下:
//Page_Load()过程中

Btn1.Attributes.Add("onclick","Javascript:alert("你单击了按钮")");

//页面文件标签

<asp:button id="Btn1" text="单击" runat="server" />

*说一下,这个属性在DataGrid和DataList、Repeater控件中同样适用!

C>单击出现Alert确定的简单方法<div>。
其实这算一个小技巧,又是一种不是方法的方法。举个例子,我们要单击Label1控件的时候出现提示“你确定吗?”应该怎么做?看代码:
//页面文件标签

<div onclick="alert("你确定么?");">
<asp:Label id="Label1" text="测试" runat="server" />
</div>

//或者:

<div onclick="if(!confirm("你确定么?")) return false;">
<asp:Label id="Label1" text="测试" runat="server" />
</div>

*怎么样,是不是很简单,活用了 ,呵呵

D>Response.Write()中输出JS
需要用到正则匹配,就是大家知道的正则表达式拉。不好解释,举个例子算了:
// 在DW中

<%#DataSe12.FieldValue("tiltle",Container).Length>0?"<a onclick=window.open(\"a.aspx\");>"+ DataSe12.FieldValue("tiltle", Container)+"</a>" : "" %>

// 在VS.Net中

<%DataBinder.Eval(Container,"DataItem.title","<a onclick=window.open(\"a.aspx\");>{0}</a>") %>

//Response.Write()中

<%
  string text="<script language="javascript">alert("ok!");</";
  text=text+"script>";
  Response.Write(text);
%>


4.其他一些DW中应注意的小问题:
  其实在开发DW项目的时候有很多小技巧会帮助你大大提高工作效率:
合理运用Web.Config文件。我们可以把一些常用的属性全部都配置到该文件中去,例如数据链接等,会提高效率;
合理使用DataList和DataGrid控件。由于DataList相对自由,可以自定义许多简单样式,所以列表时推荐使用DW的DataList控件。
RePeater的使用。DataGrid虽然带有分页功能但是很死板,自定义分页又很麻烦。这时候和不使用RePeater呢?DW的数据绑定中很轻松的就可以实现分页功能,而且只需要在面板中设定,并不需要些代码……
尽量少的重复打开数据链接。如果在DW中设置了数据链接。那么在页面加载前链接是打开的,数据读取完毕后DreamweaverCtrls.Dll组件将会把链接关闭;如果你为了同时实现其他的功能在Page_Load()中 或其他函数过程中再次定义数据链接,可能造成资源的浪费,但很多时候又不得不这么做……这可能就是DW的一个弊端吧……
最后一点建议,学会去学习DW自动生成的一些代码中的精华。往往DW自动生成的一些代码都是很优化、很统一格式代码,对我们的学习很有帮助,所以我建议在有时间的时候多多切换到查看源代码模式看一下DW到底生成了些什么.net程序,呵呵,相信对你有帮助的!

DW+ASP.Net实战(五):留言板演示--大结局

经过了前四讲的理论,今天我们就进入实战阶段:我们将从头开始演示一个完成的留言板程序。来结束我们的DW+ASP.Net程序学习~~

程序前提:
1。建立IIS虚拟目录。我起的名字叫“guest”
2。在DW中创建一个新的站点让他指向“guest”根目录。
3。在IE中测试虚拟目录http://localhost/guest/ 成功即可。
4。打开Access数据库,创建一个guest.mdb的文件保存到guest目录的db子目录底下。在guest.mdb中创建guest表字段分布如下:id(自动编号/key)pubuser(文本)email(文本)title(文本)content(备注)ip(文本)addTime(日期时间)ifShow(数字)answer(备注) 最后保存。

言归正传:
1。创建一个ASP.Net C#的动态文件default.aspx保存到guest目录。
2。建立数据链接。在右侧面板上点击“应用程序”的“数据库”面板;单击“+”号,选择“OLE DB连接” 在弹出的对话框中输入连接数据库代码:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=X:\…\guest.mdb "
//其中的Source应该输入数据库的绝对路径

输入结束后点击“测试”,测试成功后点击“确定”即可。这样我们便建立了OLE DB数据连接。选择“服务器行为”面板,点击“部署”将DW的组件部署到guest目录下的bin目录下。
在default.aspx中建立三个如图所示的表格,并按照如图所示设计好内容;点击“服务器行为”面板的“+”,然后选择“数据集”,按照如图方式创建“数据集”
按照下图样式将各个动态文本加入到表格中去,并且选定重复区域;最后添加分页标记“首页” 字样链接为“./”;“添加新留言”字样链接为“?act=add”;“显示被屏蔽留言”字样链接为“?act=showClose”;“留言表单”和“回复表单”分别用<asp:Panel>控件饱含起来。两个Panel的Visible的默认属性为“false”不显示
切换到“代码”视图,在页面最上端添加如下代码:


<%@ Import NameSpace="System"%>
<%@ Import NameSpace="System.Data"%>
<%@ Import NameSpace="System.Data.OleDb"%>

在<html>前面添加如下代码:

<script runat="server">
  string act;
  string sql;
  OleDbConnection conn;
  OleDbCommand comm;
protected void Page_Load(Object Src, EventArgs E)
{
Response.Expires = 0;
  conn = new OleDbConnection(System.Configuration.ConfigurationSettings.AppSettings["MM_CONNECTION_STRING_conn"]);
  conn.Open();  
  
  if(Request.QueryString["act"]!=null){
    //
  act=Request.QueryString["act"].ToString();
  }else{
    //
  act="";
  }
  switch (act){
    //
  case "add":addGuest.Visible=true;break;
  case "showClose":sql="sel&#101;ct * from guest wh&#101;re ifShow=0 o&#114;der by id desc";break;
  case "close":
      sql = "up&#100;ate guest set ifShow=0 wh&#101;re id="+Request.QueryString["id"];
    comm = new OleDbCommand(sql,conn);
    comm.ExecuteNonQuery();
    Response.Redirect("./");
    break;
  case "open" :
    sql = "up&#100;ate guest set ifShow=1 wh&#101;re id="+Request.QueryString["id"];
    comm = new OleDbCommand(sql,conn);
    comm.ExecuteNonQuery();
    Response.Redirect("./");
    break;
  case "back" :backs.Visible=true; break;
  case "doBack":
    sql="up&#100;ate guest set answer=""+Request["backword"]+"" wh&#101;re id="+Int32.Parse(Request["id"].ToString());
    comm = new OleDbCommand(sql,conn);
    try{
    comm.ExecuteNonQuery();
    Response.Write(sql);
    }catch(Exception ee){
      Response.Write(ee.Message);
    }
    Response.Redirect("./");
    break;
  default:;break;
  
  }
  if (!IsPostBack) DataBind();
  conn.Dispose();
  conn.Close();
}
</script>


将DW自动生成的<MM:DataSet id="DataSet1">的CommandText属性修改为:
CommandText="<%# Request.QueryString["act"]=="showClose"? sql : "Sel&#101;ct * FROM guest Wh&#101;re ifShow = ? o&#114;DER BY id DESC" %>"



最后保存此文档。
呵呵。大功告成了。赶紧测试一下吧!

好了,经过了这么“坎坷”,我们的DW+ASP.net的实战就告一段落了。谢谢大家的支持。这个讲座一共5篇,算不上很彻底的讲解了一些DW在.net中的一些用法,最后还用一个完整的留言板例子来做首尾,很多更深奥的东西还需要大家自己去探索,以后也可能还会不定期的写一些关于DW的文章, 欢迎关注。
下载文件
点击这里下载文件

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):