《拓文asp.net网站内容管理系统》官方演示站。
 设为首页  
 收藏本站
 作者:黄振安
 QQ:53854651
首 页 开源拓文.NET编程网站编程网页设计图形图像数据库软件工程留言本
    站内搜索:  
您现在的位置: 拓文网络 → .NET编程 → ASP.NET → C#版的网站新闻发布系统[正文]

热 门 文 章

相 关 文 章
  • ASP.NET性能优化
  • 在.NET框架应用程序中发送电子邮件
  • .net打包自动安装数据库
  • asp.net开发wap必备:更好的匹配手机设备
  • 用ashx动态生成文件
  • windows 2003下asp.Net站点无法使用用户名+密码的方
  • ASP.NET中17种正则表达式
  • 提高ASP.Net应用程序性能的十大方法
  • 一个通过web.Mail发送邮件的类
  • 在DataGrid里面根据日期的不同显示new图标
  • C#版的网站新闻发布系统
     
    [作者:不详    转贴自:不详    点击数:    更新时间:2006-3-2 15:46:54]

    写这篇文章的时候首先要向bben_h 和jdxx表示感谢,是bben_h提出了C#中字符替换这个问题,jdxx很好的解决了这个问题,同时也使我想起以前做的一些程序(简单网站新闻发布系统),现在就把它奉献给大家,希望能对大家学习通过ADO.NET操作SqlServer数据库和DataGrid控制元件有些帮助。

      数据库结构

      数据库名:mydb,数据表名:news
      news表结构
      id(int 4) 递增ID
      biaoti(nvarchar 50) 新闻标题
      zhaizi(nvarchar 50) 出自
      neirong(ntext 16) 新闻内容
      shijian(datatime 8)发布时间
      img(nvarchar 50)图片路径
      counter(int 4)点击次数
     
      程序中连接SqlServer数据库,其中netfiresoft是我的机子的名称。
     
      网站新闻发布系统源程序:(数据库用的是SqlServer)
     
      增加页面(addnews.aspx)
     
      〈%@Page language="C#" Debug="True"%〉
      〈%@Import Namespace="System.Data"%〉
      〈%@Import Namespace="System.Data.SqlClient"%〉
      〈html〉
      〈head〉
      〈title〉网站新闻信息添加页面〈/title〉
      〈style type="text/css"〉
      〈!--
      table {  font-size: 9pt}
      body {  font-size: 9pt}
      --〉
      〈/style〉
      〈Script Language="C#" runat="server"〉
      void submit_Click(Object sender,EventArgs e)
      {
      //当单击提交按钮之后执行下面的代码
       SqlConnection MyConnection;
      SqlCommand MyCommand;
      String ConnStr;
       DateTime now= DateTime.Now;
       //链接SQL Server数据库
      MyConnection =new SqlConnection("Initial Catalog=mydb;Data Source=netfiresoft;Integrated Security=SSPI;");
      MyConnection.Open();
      String neirong2;
      neirong2=Server.HtmlEncode(neirong.Text);
      String zh="";
      String tmpstr="";
      for (int i=0; i〈neirong2.Length;i++) {
      zh=neirong2.Substring(i,1);
     if (zh==" ") { zh=" ";}
     if (zh=="\n") { zh="〈br〉"; }
     if (zh=="\t") { zh="    ";}
     tmpstr=tmpstr+zh; }
     neirong2=tmpstr;
      if ((biaoti.Text=="")||(neirong2==""))
     {
      Label1.Text="标题或内容不能为空!";
      }
      else if (biaoti.Text.Length〉=100)
     {
      Label1.Text="你的标题太长了!";
     }
      else if (img.Text.Length〉=100)
     {
      Label1.Text="你的图片路径太长了!";
     }
      else
     {
      //将新记录插入到数据库中
      ConnStr="insert into news(biaoti,zhaizi,neirong,shijian,img,counter) VALUES(‘"+biaoti.Text+"‘,
    ‘"+zhaizi.Text+"‘, ‘"+neirong2+"‘, ‘"+now.ToString()+"‘, ‘"+img.Text+"‘,0)";
      MyCommand=new SqlCommand(ConnStr,MyConnection);
      MyCommand.ExecuteNonQuery();
      Label1.Text="增加成功!";
     }
      biaoti.Text="";
      zhaizi.Text="";
      neirong.Text="";
      img.Text="";
    }
    void reset_Click(Object sender,EventArgs e)
    {
      //当单击取消按钮之后执行下面代码
      biaoti.Text="";
      zhaizi.Text="";
      neirong.Text="";
      img.Text="";
    }
    〈/Script〉
    〈/head〉
    〈body 〉
    〈table width="550" border="1" cellspacing="0" cellpadding="0" align="center"
    bordercolorlight="#666666" bordercolordark="#FFFFFF"〉
    〈form runat=server〉
     〈tr bgcolor="#CCCCCC"〉
      〈td colspan="2"〉网站新闻信息添加页面〈/td〉
     〈/tr〉
     〈tr〉
      〈td colspan="2"〉 〈/td〉
     〈/tr〉
     〈tr〉
      〈td width="78"〉标题:〈/td〉
      〈td width="416"〉 〈asp:TextBox  id="biaoti" size="50" runat="server"/〉
      〈/td〉
     〈/tr〉
     〈tr〉
      〈td width="78"〉摘自:〈/td〉
      〈td width="416"〉 〈asp:TextBox id="zhaizi" size="30" runat="server"/〉 〈/td〉
     〈/tr〉
     〈tr〉
      〈td width="78"〉图片:〈/td〉
      〈td width="416"〉〈asp:TextBox id="img" size="30" runat="server"/〉〈/td〉
     〈/tr〉
     〈tr〉
      〈td width="78"〉内容:〈/td〉
      〈td width="416"〉 〈asp:TextBox id="neirong" Columns="60" Rows="15" TextMode="MultiLine" runat="server"〉〈/asp:TextBox〉〈/td〉
     〈/tr〉
     〈tr〉
      〈td colspan="2"〉 〈/td〉
     〈/tr〉
     〈tr〉
      〈td colspan="2"〉
      〈div align="center"〉
       〈asp:Button  id="submit"  onClick=submit_Click runat="server" Text="提交"〉〈/asp:Button〉
       〈asp:Button  id="reset" onClick=reset_Click runat="server" Text="取消"〉〈/asp:Button〉
      〈/div〉
      〈/td〉
     〈/tr〉
    〈/form〉
    〈/table〉
    〈p align="center"〉〈asp:Label id="Label1"  runat="server"/〉
    〈/body〉
    〈/html〉
     
      显示新闻标题页面(newsshow.aspx):(用到DataGrid控制元件)
     
    〈%@Page language="C#" Debug="True"%〉
    〈%@Import Namespace="System.Data"%〉
    〈%@Import Namespace="System.Data.SqlClient"%〉
    〈Html〉
    〈Head〉
    〈Title〉网站新闻发布系统〈/Title〉
    〈script language="C#" runat="server" 〉
    //当刚载入页面时候执行下面的程序。
    int startIndex;
    void Page_Load(Object Src,EventArgs E)
    {
       if (!IsPostBack)
       {
               startIndex =0;
        }          
    //绑定DataGrid
    Binding();
    }
    //链接数据库,绑定DataGrid
    void Binding()
    {
     SqlConnection MyConnection;
     String ConnStr;
     MyConnection =new SqlConnection("Initial Catalog=mydb;Data Source=netfiresoft;Integrated Security=SSPI;");
     MyConnection.Open();
     String strCom= "SELECT  id ,biaoti ,zhaizi ,counter ,shijian FROM news ORDER BY id DESC";
     DataSet myDataSet= new DataSet();
     SqlDataAdapter myCommand=new SqlDataAdapter(strCom,MyConnection);
     //填充DataSet
     myCommand.Fill(myDataSet,"news");
     //关闭链接
     DataGrid1.DataSource = myDataSet.Tables["news"].DefaultView;
     //绑定 DataGrid
     DataGrid1.DataBind();
    }
    void ChangePage(Object sender,DataGridPageChangedEventArgs e)
    {
         startIndex = e.NewPageIndex*DataGrid1.PageSize;
         DataGrid1.CurrentPageIndex = e.NewPageIndex;
         Binding();
    }
    〈/script〉
    〈/Head〉
    〈Body runat=server〉
    〈p align="Center"〉〈font size="+3"〉新闻浏览〈/font〉
    〈form runat=server〉
    〈asp:DataGrid id=DataGrid1
     runat="server"
     ForeColor="Black"
     PagerStyle-Mode="NumericPages"
     Headerstyle-BackColor="#AAAADD"
     AlternatingItemStyle-BackColor="#FFFFCD"
     OnPageindexChanged="ChangePage"
     PageSize="10"
     AllowPaging="True"
     Width="80%"
     Font-Name="Verdana"
     Font-Size="8pt"
     autogeneratecolumns="False"〉
    〈Columns〉
    〈asp:HyperLinkColumn
                   HeaderText="标题"
                   DataNavigateUrlField="id"
                   DataNavigateUrlFormatString="show.aspx?id={0}"
                   DataTextField="biaoti"
                   Target="_new"
                   /〉
    〈asp:BoundColumn HeaderText="摘自" itemstyle-width=20% DataField=zhaizi/〉
    〈asp:BoundColumn HeaderText="点击次数" itemstyle-width=10% DataField=counter/〉
    〈asp:BoundColumn HeaderText="发表日期" itemstyle-width=20% DataField=shijian/〉
    〈/Columns〉
    〈/asp:DataGrid〉
    〈/form〉
    〈/Body〉
    〈/Html〉
     
      新闻内容浏览页面(show.aspx):
     
    〈%@Page language="C#" Debug="True"%〉
    〈%@Import Namespace="System.Data"%〉
    〈%@Import Namespace="System.Data.SqlClient"%〉
    〈html〉
    〈head〉
    〈title〉新闻发布系统〈/title〉
    〈style type="text/css"〉
    〈!--
    TABLE {    FONT-SIZE: 9pt }
    INPUT {    FONT-SIZE: 9pt }
    SELECT{ FONT-SIZE: 9pt }
    BODY {    FONT-SIZE: 9pt }
    a:link { color: #000099; text-decoration: none}
    a:visited { color:#000099; text-decoration: none}
    a:hover { color: #990000; text-decoration: underline}
    td {font-size:9pt;line-height:13pt;}
    .p1 {  font-family: "宋体"; font-size: 9pt}
    .p2 {  }
    .p3 {  font-family: "宋体"; font-size: 12pt}
    --〉
    〈/style〉
    〈script Language="C#" runat="server"〉
     DataSet ds;
     DataRow dr;
     String newsid;
    void Page_Load(Object sender,EventArgs e)
    {
     SqlConnection MyConnection;
     String ConnStr,strCon;
     newsid = Request.Params["id"];
     MyConnection =new SqlConnection("Initial Catalog=mydb;Data Source=netfiresoft;Integrated Security=SSPI;");
     MyConnection.Open();
     String strCom= "SELECT  biaoti ,zhaizi ,neirong,img,counter ,shijian FROM news where id="+newsid;
     ds= new DataSet();
     SqlDataAdapter myCommand=new SqlDataAdapter(strCom,MyConnection);
     myCommand.Fill(ds,"news");
     dr = ds.Tables["news"].Rows[0];
     strCon ="SELECT counter FROM news WHERE id = "+newsid;
     SqlCommand myCommand2= new SqlCommand(strCon, MyConnection);
     SqlDataReader reader = myCommand2.ExecuteReader();
     reader.Read();
     int i = reader.GetInt32(0);
     i++;
     reader.Close();
     strCon ="UPDATE news SET counter = "+i.ToString()+" WHERE (id= "+newsid+")";
     myCommand2.CommandText = strCon;
     myCommand2.ExecuteNonQuery();
     MyConnection.Close();
    }
    〈/script〉
    〈/head〉
    〈body bgcolor="#FFFFFF" link="#000000"〉
    〈div align="center" class="p2"〉
    〈table width="500" border="0" cellspacing="0" cellpadding="0"〉
     〈tr〉
      〈td〉〈div align="center"〉新闻发布系统〈/div〉〈/td〉
     〈/tr〉
     〈tr〉〈td〉 〈/td〉
     〈/tr〉
    〈/table〉
    〈table width="500" border="1" cellspacing="0" cellpadding="0" bordercolordark="#FFFFFF" bordercolorlight="#CCCCCC"〉
     〈tr〉
      〈td background="mmto.gif" height="15" width="470"〉
      〈table width="500" border="0" cellspacing="0" cellpadding="0" background="mmto.gif"〉
       〈tr〉
        〈td background="mmto.gif"〉 〈/td〉
        〈td background="mmto.gif"〉
          〈div align="right"〉
          〈img src="printer.gif" width="16" height="14"〉
          〈a href="javascript:window.print()"〉打印本页〈/a〉
          〈/div〉
        〈/td〉
       〈/tr〉
      〈/table〉
      〈/td〉
     〈/tr〉
     〈tr〉
      〈td width="470"〉
       〈table width="500" border="0" cellspacing="0" cellpadding="0"〉
        〈tr align="center"〉
         〈td class="p3"〉〈br〉 〈%=dr["biaoti"]%〉〈/td〉
        〈/tr〉
        〈tr align="center"〉
         〈td〉 〈div〉 〈hr size="1" width="300"〉
              〈font color="#999999"〉[〈%=dr["shijian"]%〉]〈/font〉〈br〉
              〈/div〉
         〈/td〉
        〈/tr〉
        〈tr〉
         〈td〉
            〈%
               if(dr["img"] != "") {
               Response.Write("〈img src=‘" + dr["img"] + "‘ border=0 align=‘left‘ width=‘20‘ height=‘200‘〉");
            }
            %〉〈br〉 〈%=dr["neirong"]%〉
         〈/td〉
        〈/tr〉
        〈tr〉
         〈td〉 〈br〉  
              〈br〉 摘自: 〈%=dr["zhaizi"]%〉
              〈br〉
         〈/td〉
        〈/tr〉
        〈tr〉
         〈td〉
          〈div align="right"〉〈/div〉
         〈/td〉
        〈/tr〉
       〈/table〉
      〈/td〉
     〈/tr〉
     〈tr〉
      〈td height="17"〉
       〈table width="498" border="0" cellspacing="0" cellpadding="0" mmto.gif"〉
        〈tr〉
         〈td width="172" background="mmto.gif"〉本条消息被浏览了
           〈font color="#FF3333"〉[〈%=dr["Counter"]%〉]〈/font〉回
         〈/td〉
         〈td width="172" background="mmto.gif"〉 
         〈/td〉
         〈td width="134" background="mmto.gif"〉
          〈p align="right"〉〈a href="javascript:window.close()"〉关闭本窗口 〈/a〉〈/p〉
         〈/td〉
        〈/tr〉
       〈/table〉
      〈/td〉
     〈/tr〉
    〈/table〉
    〈table width="500" border="0" cellspacing="0" cellpadding="0"〉
     〈tr〉
      〈td〉〈img src="bian.gif" width="500" height="13"〉〈/td〉
     〈/tr〉
    〈/table〉
    〈/div〉
    〈/body〉
    〈/html〉
     

    树形图用于显示按照树形结构进行组织的数据,其用途比较广泛,如计算机中的文件系统(Windows中的资源管理器)、企业或公司的组成结构等。我们知道在Windows下VB、PB、Delphi等工具提供了一个功能很强的树型控件TreeView,利用Treeview控件可以方便地开发树形图。然而在网页上实现树形图就不那么容易了,现在在ASP.NET中利用微软提供的Internet Explorer WebControls它使得网页上的树形图开发与在Windows下一样的方便,一样的功能强大,甚至更灵活。

    本文介绍用Internet Explorer WebControls开发树形图的方法,由于树形图结构较复杂,使用起来常不知如何下手。笔者结合最近刚为公司用ASP.NET编写的应用程序管理器这一具体实例,详细阐述在ASP.NET下如何将Internet Explorer WebControls的使用与数据库联系起来,实现数据分任意多层显示,方便地进行增加、修改、删除、移动操作。笔者希望通过对该实例的阐述,达到抛砖引玉的效果,与各位同仁相互交流,共同进步。

    Internet Explorer WebControls不在VS.NET的标准Server Control中,要到微软的站点上下载,下载地址是:
    http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
    下载安装后第一次使用时,要右击工具箱Customize Toolbox…→.NET Framework Components中找到Micosoft.Web.UI.WebControls.Treeview后选中,这样Treeview控件就出现在工具箱中了。

    一、树的建立

    具体方法是:创建一个数据库,设计树图信息表TREE_INFO,包含NODEID、PARENTID、NODENAME、ADDERSS、ICON字段,其它字段根据实际业务而定,节点名称NODENAME将在树型控件的节点上显示,NODEID字段保存节点的唯一标识号,PARENTID表示当前节点的父节点号,标识号组成了一个“链表”,记录了树上节点的结构。设计一个Web窗体其上放置TreeView控件。
    Private Sub CreateDataSet()’建立数据集
    Dim myConn As New SqlConnection()
    Dim myCmd As New SqlCommand("select NODEID,NODENAME,PARENTID,ADDRESS,ICON from Tree_info", myConn)
    Dim myDataAdapter As New SqlDataAdapter()
    myConn.ConnectionString = Application("connectstring")
    myCmd.CommandText = ""
    myCmd.Connection = myConn
    myDataAdapter.SelectCommand = myCmd
    myDataAdapter.Fill(ds, "tree")
    End Sub
    建树的基本思路是:从根节点开始递归调用显示子树
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    CreateDataSet()
    intiTree(TreeView1.Nodes, 0)
    End Sub
    Private Sub intiTree(ByRef Nds As TreeNodeCollection, ByVal parentId As Integer)
    Dim dv As New DataView()
    Dim drv As DataRowView
    Dim tmpNd As TreeNode
    Dim intId As Integer
    dv.Table = ds.Tables("tree")
    dv.RowFilter = "PARENTID=’" & parentId & "’"
    For Each drv In dv
    tmpNd = New TreeNode()
    strId = drv("NODE_ID")
    tmpNd.ID = strId
    tmpNd.Text = drv("NODE_NAME ")
    tmpNd.ImageUrl = drv("ICON").ToString
    Nds.Add(tmpNd)
    intiTree(Nds(Nds.Count - 1).Nodes, intId)
    Next
    End Sub

    二、增加、删除树节点

    单纯在Treeview 上增加、删除、修改节点只需用Nodes属性的Add、 Remove、等方法即可,值得注意的地方是VS.NET中Treeview的Nodes集合与VS6.0中的区别,VS6.0中的是一个大的集合,而VS.NET中的是分层的每个Node下都有Nodes属性。增加、删除、修改树节点时与VS6.0相比有很大差别,特别是删除时。
    Private Sub ButAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButAdd.Click’在选定的节点下添加子节点
    Dim tmpNd As New TreeNode(), NdSel As TreeNode
    tmpNd.ID = GetNewId()
    NdSel = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)’选中的节点
    tmpNd.Text = "新节点"
    NdSel.Nodes.Add(tmpNd)
    Dim myRow As DataRow
    myRow = ds.Tables("tree").NewRow()
    myRow("NODE_NAME") = tmpNd.ID
    myRow("NODE_DESCRIPT") = "新节点" & tmpNd.ID & "_" & NdSel.ID
    myRow("PARENT_NAME") = NdSel.ID
    ds.Tables("tree").Rows.Add(myRow)
    End Sub
    Private Sub ButDele_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButDele.Click’删除选中的节点
    Dim idx As String = TreeView1.SelectedNodeIndex()
    GetNdCol(idx).Remove(TreeView1.GetNodeFromIndex(idx))
    Dim dv As New DataView(), recNo As Integer
    dv.Table = ds.Tables("tree")
    dv.RowFilter= "NODEID=" & NdId
    dv.Delete(0)
    End Sub
    Private Function GetNdCol(ByVal idx As String) As TreeNodeCollection
    ‘获得选中节点的父节点的Nodes集合
    Dim cnt As Integer, i As Integer
    Dim tmpNds As TreeNodeCollection
    Dim idxs() As String
    idxs = Split(idx, ".")
    cnt = UBound(idxs)
    If cnt = 0 Then
    tmpNds = TreeView1.Nodes
    Else
    tmpNds = TreeView1.Nodes(CInt(idxs(0))).Nodes
    For i = 1 To cnt - 1
    tmpNds = tmpNds(CInt(idxs(i))).Nodes
    Next
    End If
    Return tmpNds
    End Function

    三、修改、移动树节点

    由于服务器控件不支持鼠标拖动事件,所以不能象Windows程序那样通过拖动移动节点,这里是通过选择父节点的方式。移动是通过在原位置删除,新位置添加实现的,要注意在删除时先保存节点信息。
    Private Sub TreeView1_SelectedIndexChange(ByVal sender As Object, ByVal e As Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles TreeView1.SelectedIndexChange
    Dim dv As New DataView()
    dv.Table = ds.Tables("tree")
    Dim tmpNd As TreeNode = TreeNdSel(e.OldNode), tmpNds As TreeNodeCollection
    dv.RowFilter= "NODEID=" & tmpNd.ID
    dv(0)("NODE_DESCRIPT") = Me.TextBox1.Text
    dv(0)("ADDRESS") = Me.TextBox2.Text
    dv(0)("TARGET") = Me.TextBox3.Text
    dv(0)("ICON") = Me.TextBox4.Text
    If dv(0)("PARENTID").ToString <> Me.DropDownList1.SelectedItem.Value Then
    ‘移动节点
    dv(0)("PARENT_NAME") = Me.DropDownList1.SelectedItem.Value
    If Me.DropDownList1.SelectedItem.Value = "ROOT" Then
    tmpNds = TreeView1.Nodes
    Else
    tmpNds = FromIdToNode(Me.DropDownList1.SelectedItem.Value, TreeView1.Nodes).Nodes’新的父节点的Nodes集合
    End If
    GetNdCol(e.OldNode).Remove(tmpNd)
    tmpNds.Add(tmpNd)
    End If
    tmpNd.Text = Me.TextBox1.Text
    tmpNd.ImageUrl = Me.TextBox4.Text
    tmpNd = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)
    dv.RowFilter= "NODEID=" & tmpNd.ID
    Me.TextBox1.Text = dv(0)("NODENAME").ToString
    Me.TextBox2.Text = dv(0)("ADDRESS").ToString
    Me.TextBox3.Text = dv(0)("TARGET").ToString
    Me.TextBox4.Text = dv(0)("ICON").ToString
    End Sub
    Private Function FromIdToNode(ByVal ID As String, ByVal Nds As TreeNodeCollection) As TreeNode
    ‘由关键字查找节点
    Dim i As Integer
    Dim tmpNd As TreeNode, tmpNd1 As TreeNode
    For Each tmpNd In Nds
    If tmpNd.ID = ID Then
    Return tmpNd
    Exit Function
    End If
    tmpNd1 = FromIdToNode(ID, tmpNd.Nodes)
    If Not (tmpNd1 Is Nothing) Then
    Return tmpNd1
    Exit Function
    End If
    Next
    Return Nothing
    End Function


    首页 | 1 | 尾页  共 1 页
     
    winner 打印本页 关闭窗口

         文 章 评 论
    评论人 查看该文章的评论 发表时间
       笔 名* : 0 50分 60分 70分 80分 90分 100分
    评论内容 *: (最多1000字。当前字数:0)


    没有相关评论,欢迎您参与!

    - 关于本站 - 网站帮助 - 下载声明 - 友情连接 - 网站地图 -
    Copyright © 2005-2006 myTopWin.Com. All Rights Reserved . [桂ICP备06004496号]