使用visual source safe进行源代码管理 (转)

owered by BlogDriver 2.1 柯从华的博客
 
文章
总目录| asp.net精华区 |
 vs.net web项目使用visual source safe进行源代码管理 vs.net web项目使用visual source safe进行源代码管理


这段时间在公司做一个.net项目,
一个项目开发小组3个人,开发环境是vs.net,语言是c#,三个人协同开发。既然是协同开发,就要找一个源代码控制软件来进行开发中的源代码管理和版本控制。我们首先想到的是clearcase,名气大嘛,而且大家都没用过,都想尝尝鲜。谁知道这个玩意实在是太复杂了,先是要在window2000上安装active
directory (就这都弄了一整天),然后又是license问题,
千辛万苦的总算是安装好,能运行了。一看那么多的程序项,那么多的文档,一个字:晕,什么玩意啊,弄的这么复杂,还让不让人活了。从此,再也没人提clearcase了,都自认弱智,搞不定这玩意。接下来的选择就是Vss了,跟clearcase比,vss真是可爱多了,小巧玲珑,功能虽没有clearcase强大,但对于一般的不是很大的项目是足够了。

我们在使用过程中基本比较顺利,window应用项目很简单,在使用中一点问题没出,web应用项目出了些问题,主要是配置的时候有些地方比较容易搞错,在此主要就web应用的vss管理做一定的描述。
首先是vss的版本问题,visual studio
6中的vss是版本6.0,.net是不能用这个版本的,要用vss6.0c,这是6.0的一个改进版本,可是在vs.net中文企业架构版的7张碟中竟然没有这个vss6.0c,据说在英文版中有,我没英文版的也搞不清楚,后来在网上找到一个vss6.0c。
安装比较简单,现在服务器上安装vss6.0c,安装好后,在服务器目录C:/Program Files/Microsoft Visual
Studio/Common/VSS下有个NETSETUP.EXE文件,共享这个目录,客户机就执行这个NETSETUP.EXE文件进行安装。
  创建源代码管理数据库
在服务端要先创建一个源代码管理数据库,以存储您的开发团队的共享文件的服务器版本。
  为源代码管理数据库创建共享网络文件夹
在源代码管理服务器中,打开 Windows 资源管理器,新建一个名为 test的文件夹。
右击"test",然后单击"属性"。
在"test 属性"对话框中,单击"共享"选项卡,然后单击"共享该文件夹"。
现在可以在共享的 test 中创建源代码管理数据库了。
  创建源代码管理数据库
在服务器,单击"开始"按钮,指向"程序",指向"Microsoft Visual SourceSafe",然后单击"Visual SourceSafe 6.0
Admin"。
在"Visual SourceSafe Administrator"对话框的"Tools"菜单中,单击"Create Database"。
在"Create new VSS Database in"框中,找到上面建立的"test"目录
Visual Studio .NET 的源代码管理数据库已设置成功。
然后添加用户,就是开发团队的人员都给分配一个账号,以后要打开这个数据库要进行身份认证的。
  建立web应用项目
  比如你的web应用准备建立在d:/web中,则先在IIS中建立一个web,指向这个目录,同时你指定端口90给这个web,你的这个web应用的url就是:http://localhost:90.
  好了,这个web就是你们项目的最初所在地了。
  选择 Web 访问方法
  先要选择 Web 访问方法 ,我们要选择文件共享方式,这样的方式能够充分的发挥vss源代码管理的全部功能,比frontpage方式要好。
  打开vs.net,在 Tools(工具)菜单上,单击 Options(选项)。
  在 Options(选项)对话框中,单击 Projects(项目)文件夹,然后单击 Web Settings(Web 设置)。
  在 Preferred access method(首选访问方法)下,单击 File share(文件共享)。
  现在我们要在这个web上建立一个vs.net的web项目
  文件--新建--项目,左边选择visual
  c#项目,右边选择asp.netweb应用程序。在位置的地方指向你的web的URL:http://localhost:90,这会在你的web上建立一个web应用,如图所示:

  把web项目添加进源代码管理
  在 Solution Explorer(解决方案资源管理器)中,右键单击解决方案节点,然后单击 Add Solution to Source
  Control(将解决方案添加到源代码管理)。
  按照源代码管理提供程序的要求提供数据库位置(你要把这个web应用添加到哪个数据库),和用户登录信息。我们把这个web项目添加到上面建的那个数据库中。如图:


选完数据库后,会得到提示web项目在数据库中的存储结构,先是提示这个方案的解决方案在数据库中的存储位置(解决方案是比项目高一级的单位,一个解决方案可以包括多个项目,在.net中任何项目都必须包括在一个解决方案中,若没指定解决方案也会给你指定一个跟这个项目同名的解决方案的,比如本项目,项目名是loaclhost,vs.net自动给添加了一个叫localhost的解决方案),我们在这建立一个test_solution的目录存放解决方案,在project中填入test_solution,按create按钮,会在数据库的根目录下建立一个test_solution目录。如图:


在根解决方案目录下,键入项目文件夹的名称,该文件夹将包含 Web 项目文件的主控副本。
如图:
 

OK,你的web到此被添加到了vss的数据库test中了。
  一旦你的web项目进入了vss的数据库,原始的http://localhost:90这个位置的web就不再重要了,你可以废弃它了,因为所有的信息都进入数据库了,以后所有团队成员要打开这个项目都是在这个数据库中取得工作副本,然后在自己的本地副本上工作,服务器上的的是主控副本。团队成员只要第一次从数据库中取得数据建立本地工作副本,以后只要跟一般的web项目在本地打开这个项目就行了。工作副本跟主控副本通过签入签出进行交互。

  建立工作副本
  web项目进入了vss的数据库 ,就处于vss的管理之下,开发团队的所有成员需要从这个vss数据库中取得web项目主控副本的本地工作副本。
  要保证自己的机器要安装有IIS,因为要在本地建立web的工作副本需要IIS支持,这个工作副本将做为本地的一个web建立到你的机器上,以提供你在自己的机器上开发调试这个web项目的能力。

  选择web访问方式
  同前面描述的一样,选择文件共享方式
  在 File(文件)菜单上,单击 Source Control(源代码管理),然后单击 Open from Source
  Control(从源代码管理打开)。 将提示你输入相应的源代码管理数据库,我们要找到在服务器上建立的那个test数据库,按browse按钮,在"open
  sourcesafe
  database"对话框中显示了你本机的vss所知道的vss数据库,test库并未在此列出,我们再点击"browse"按钮,去找服务器上我们先前建立test数据库时那个共享的test目录,选择在这个目录下srcsafe.ini文件,打开,给这个数据库起个名字"test",这样包含我们的web项目的test数据库被引入本机的vss,打开这个数据库。

  打开数据库后,系统将让你选择这个web项目的解决方案在你本机的存放路径,如图:

注意,这里选的是解决方案的存放地,关于解决方方案我们在前面已经论述过,解决方案的存放地你可以自己任意放在何处,当工作副本建立好以后,正常工作时就是从这个解决方案来打开你的工作副本就行工作的。
OK,下一步,这里将要选择工作副本在你本地的URL,一般选择你本地缺省web下面的一个子目录,比如本项目,将工作副本放在:http://localhost/test,如图


一切大功告成。
- 作者: 柯从华 2005年04月18日, 星期一 18:55  回复(0) |  引用(0) 加入博采
 用asp.net制作排序、分页解决数据大的问题(实用)
一、概述:

   
Datagrid在web应用程式中经常用到,但是Datagrid控件本身提拱的排序,分页功能对于有着大量记录的表来说,按它的做法是不现实的,如一个表有20万记录,按Datagrid本身的排序和分页的原理,必须把所有的记录全部取回,再进行分页,这对服务器的内存及响应的速度是一个挑战。本论文提供了这样一个解决方案,就是只从数据库中取回你所需要的且符合条件的记录,这样响应时间会大大的提高,内存开销也可减少。


二、实现的功能:

    1、在页面上按指定的格式显示从数据库中取回的数据(用Datagrid控件显示)。

    2、对记录进行分页(必须在数据库内进行分页,即传入第几页,每页记录数,就传回己分好页的记录)

   
3、点击Datagrid标头后以实现重新排序显示,且有点击第一次按降序,点击第二次按升序(不是对已显示的记录进行排序,而是重新到数据库中取出符合条件的并按指定顺序排序的指定页记录)


    4、可以通过点击Datagrid的CheckBox框以实现全选和全不选功能,且支持群体操作(如删除,转入等)

三、制约条件

    1、数据库表必须有一个关键字段或有一个唯一字段。  


四、制作过程(范例):

    1、数据库结构:

    本范例是用SQL Server自带的数据库Northwind为例,表为Customers
    代码编写过程: 

        1、首先用户新加一个窗体。 

       
2、在窗体上放置一个五个LinkButton控件,并设置ID为:lkbDel,LinkButtonPreview,LinkButtonNext,LinkButtonLast,LinkButtonFirst,设置各控件的Text属性为:"删除","首页","上一页","下一页",及"尾页",放置位置如上图;同时在窗体上放一个Datagrid控件,控件的名称为:dgList
 

       
3、把dgList控件的AutoSortint属性设为true,AutoGenarateColumes属性设为false,DataKeyField属性设为CustomerID,Width属性设为100%,设置dgList控件的各列如下:
 

<Columns>
  <asp:TemplateColumn>
   <HeaderStyle Width="10px"></HeaderStyle>
   <HeaderTemplate>
    <INPUT id="chkselectall" type="checkbox"
οnclick="checkallorno(this)"></asp:CheckBox>
   </HeaderTemplate>
   <ItemTemplate>
    <asp:CheckBox id="chkselect" runat="server"></asp:CheckBox>
   </ItemTemplate>
  </asp:TemplateColumn>
  <asp:BoundColumn DataField="CustomerID" SortExpression="CustomerID"
HeaderText="ID"></asp:BoundColumn>
  <asp:BoundColumn DataField="CompanyName" SortExpression="CompanyName"
HeaderText="客户名称"></asp:BoundColumn>
  <asp:BoundColumn DataField="ContactName" SortExpression="ContactName"
HeaderText="联系名称"></asp:BoundColumn>
  <asp:BoundColumn DataField="ContactTitle" SortExpression="ContactTitle"
HeaderText="职位"></asp:BoundColumn>
  <asp:BoundColumn DataField="Phone" SortExpression="Phone"
HeaderText="电话"></asp:BoundColumn>
  <asp:BoundColumn DataField="Fax" SortExpression="Fax"
HeaderText="传真"></asp:BoundColumn>
</Columns>
其中第一列是必须的,其他列可根据情况自己增加或删除。
   
其中上段代码中点击标头的CheckBox后实现所有的显示项的全选或全不选的功能是由一个javascript的checkallorno(this)函来实现的,具体函数体如下:
 

  <script>
  function checkallorno(o)
  {
   var a=o;
   while(true)
   {
    var a=a.parentElement;
    if(a==null)
    {
     break;
    }
    if(a=="undefined")
    {
     a=null;
     break;
    }
    if(a.tagName=="TABLE")
    {
     break; 
    }
   }
   if(a!=null)
   {
    for(i=0;i<a.rows.length;i++)
    {
     for(j=0;j<a.rows[i].cells[0].children.length;j++)
     {
      var var1=a.rows[i].cells[0].children[j];
      if(var1.tagName=="INPUT" )
      {
       if(var1.type=="checkbox")
       {
        var1.checked=o.checked;
       }
      }
     }
    }
    
   }
  }
  </script>
        同时设置dgList的SortCommand为dgList_SortCommand()具体实现看原码。 

    4、设置lkbDel的的Click事件为如下:lkbDel_Click(object sender, System.EventArgs
e),当然该事件名你可以随便取名,同时设置LinkButtonPreview,LinkButtonNext,LinkButtonLast,LinkButtonFirst的Click事件为同一个函数(怎样设置事件请看MSDN)。函数名为:dgList_SortCommand(object
source, System.Web.UI.WebControls.DataGridSortCommandEventArgs
e);各事件的具体实现请看源代码,在类里放两个变量如下: 

  //这是每次每页显示的记录数.
  private int RecordPerPage=6;
  //这个变量为数据库联接
  protected string m_cnnstr="data source=Robert/Robert;initial
catalog=Northwind;User id=sa;pwd=";
    5、在page_Load事件中加入以下代码: 

  private void Page_Load(object sender, System.EventArgs e)
  {
   if(!this.IsPostBack)
   {
    /*this.ViewState["TotalRecord"]
    * 用于记录总共有多少条记录
    * */
    this.ViewState["TotalRecord"]=GetTatolRecordNumber();
    /*this.ViewState["TotalRecord"]
     * 用于记录当前显示第几条记录
     * */
    this.ViewState["CurrentPg"]=1;
    /*this.ViewState["Sort"]
     *用于存放当前的排序字符串
     * */
    this.ViewState["Sort"]="";
    //对导行栏的状态进行初始化.
    setGuide(null);
    //第一次显示记录.
    ShowData();
   }
  }
        其中GetTatolRecordNumber();是取回总记录数,setGuide(null);是设置分页相关按钮的状态, 
ShowData();是用来设置dgList控件数据源,这两人函数的具体实现请看源代码。 

  

aspx原码:

<%@ Page language="c#" Codebehind="Pagination.aspx.cs" AutoEventWireup="false"
Inherits="SortAndPagination.Pagination" %>
<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls"
Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
  <title>Pagination</title>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="C#" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
  <script>
  function checkallorno(o)
  {
   var a=o;

   while(true)
   {
    var a=a.parentElement;
    if(a==null)
    {
     break;
    }
    if(a=="undefined")
    {
     a=null;
     break;
    }
    if(a.tagName=="TABLE")
    {
     break; 
    }
   }
   if(a!=null)
   {
    for(i=0;i<a.rows.length;i++)
    {
     for(j=0;j<a.rows[i].cells[0].children.length;j++)
     {
      var var1=a.rows[i].cells[0].children[j];
      if(var1.tagName=="INPUT" )
      {
       if(var1.type=="checkbox")
       {
        var1.checked=o.checked;
       }
      }
     }
    }
    
   }
  }
  </script>
</HEAD>
<body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
   <FONT face="宋体">
    <TABLE cellSpacing="1" cellPadding="1" width="100%" border="1">
     <tr>
      <td align="center" colSpan="2"><STRONG><FONT
size="4">关于排序,分页,多条记录选择及删除的范例</FONT></STRONG>
      </td>
     </tr>
     <TR>
      <TD align="right" colSpan="2"><SPAN οnclick="return
window.confirm('你真要删除所选项?')"><asp:linkbutton id="lkbDel"
runat="server">删除</asp:linkbutton></SPAN></TD>
     </TR>
     <TR>
      <TD colSpan="2"><asp:datagrid id="dgList" runat="server"
DataKeyField="CustomerID" Width="100%" AllowSorting="True"
        AutoGenerateColumns="False" PageSize="20">
        <Columns>
         <asp:TemplateColumn>
          <HeaderStyle Width="10px"></HeaderStyle>
          <HeaderTemplate>
           <INPUT id="chkselectall" type="checkbox"
οnclick="checkallorno(this)"></asp:CheckBox>
          </HeaderTemplate>
          <ItemTemplate>
           <asp:CheckBox id="chkselect" runat="server"></asp:CheckBox>
          </ItemTemplate>
         </asp:TemplateColumn>
         <asp:BoundColumn DataField="CustomerID" SortExpression="CustomerID"
HeaderText="ID"></asp:BoundColumn>
         <asp:BoundColumn DataField="CompanyName" SortExpression="CompanyName"
HeaderText="客户名称"></asp:BoundColumn>
         <asp:BoundColumn DataField="ContactName" SortExpression="ContactName"
HeaderText="联系名称"></asp:BoundColumn>
         <asp:BoundColumn DataField="ContactTitle" SortExpression="ContactTitle"
HeaderText="职位"></asp:BoundColumn>
         <asp:BoundColumn DataField="Phone" SortExpression="Phone"
HeaderText="电话"></asp:BoundColumn>
         <asp:BoundColumn DataField="Fax" SortExpression="Fax"
HeaderText="传真"></asp:BoundColumn>
        </Columns>
       </asp:datagrid></TD>
     </TR>
     <tr>
      <TD align="right" colSpan="2">
       <TABLE id="Table1" cellSpacing="1" cellPadding="1" border="0">
        <TR>
         <TD noWrap><asp:linkbutton id="LinkButtonFirst"
runat="server">首页</asp:linkbutton></TD>
         <TD>|</TD>
         <TD noWrap><asp:linkbutton id="LinkButtonPreview"
runat="server">上一页</asp:linkbutton></TD>
         <TD>|</TD>
         <TD noWrap><asp:linkbutton id="LinkButtonNext"
runat="server">下一页</asp:linkbutton></TD>
         <TD>|</TD>
         <TD noWrap><asp:linkbutton id="LinkButtonLast"
runat="server">尾页</asp:linkbutton></TD>
        </TR>
       </TABLE>
      </TD>
     </tr>
    </TABLE>
   </FONT>
  </form>
</body>
</HTML>
aspx.cs原码:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace SortAndPagination
{
/// <summary>
/// 关于排序,分页,多条记录选择及删除的范例
/// </summary>
public class Pagination : System.Web.UI.Page
{
  protected System.Web.UI.WebControls.DataGrid dgList;
  protected System.Web.UI.WebControls.LinkButton lkbDel;
  protected System.Web.UI.WebControls.LinkButton LinkButtonPreview;
  protected System.Web.UI.WebControls.LinkButton LinkButtonNext;
  protected System.Web.UI.WebControls.LinkButton LinkButtonLast;
  protected System.Web.UI.WebControls.LinkButton LinkButtonFirst;

  //这是每次每页显示的记录数.
  private int RecordPerPage=6;
  //这个变量为数据库联接
  protected string m_cnnstr="data source=devserver-1;initial
catalog=Northwind;User id=sa;pwd=";

  private void Page_Load(object sender, System.EventArgs e)
  {
   if(!this.IsPostBack)
   {
    /*this.ViewState["TotalRecord"]
    * 用于记录总共有多少条记录
    * */
    this.ViewState["TotalRecord"]=GetTatolRecordNumber();
    /*this.ViewState["TotalRecord"]
     * 用于记录当前显示第几条记录
     * */
    this.ViewState["CurrentPg"]=1;
    /*this.ViewState["Sort"]
     *用于存放当前的排序字符串
     * */
    this.ViewState["Sort"]="";

    //对导行栏的状态进行初始化.
    setGuide(null);
    //第一次显示记录.
    ShowData();
   }
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {    
   this.lkbDel.Click += new System.EventHandler(this.lkbDel_Click);
   this.dgList.SortCommand += new
System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.dgList_SortCommand);

   this.LinkButtonFirst.Click += new System.EventHandler(this.Guid_Click);
   this.LinkButtonPreview.Click += new System.EventHandler(this.Guid_Click);
   this.LinkButtonNext.Click += new System.EventHandler(this.Guid_Click);
   this.LinkButtonLast.Click += new System.EventHandler(this.Guid_Click);
   this.Load += new System.EventHandler(this.Page_Load);

  }
  #endregion


  private void ShowData()
  {
   string order=this.ViewState["Sort"].ToString();
   //构告SQL的排序字符串
   if(order!="")
   {
    order=" Order By "+order+" ";
   }
   int StartNum=(int)this.ViewState["CurrentPg"]*RecordPerPage;
   int intTemNum=StartNum-RecordPerPage;
   string l_SQL="select * from (select top "+StartNum.ToString()
    +" *  from Customers "+order+") a " 
    +" where a.CustomerID not in (Select top "+intTemNum.ToString()
    +" CustomerID From Customers "+order+")";

   System.Data.SqlClient.SqlConnection 
    l_cnn=new System.Data.SqlClient.SqlConnection(this.m_cnnstr);
   System.Data.SqlClient.SqlDataAdapter 
    l_apd=new System.Data.SqlClient.SqlDataAdapter(l_SQL,l_cnn);
   System.Data.DataTable l_dt=new DataTable("tem");
   l_apd.Fill(l_dt);

   this.dgList.DataSource=l_dt;
   this.dgList.DataBind();

  }

  /// <summary>
  /// 这是用来获取当前总共在数据库中有多少条记录
  /// </summary>
  /// <returns>返回记录数</returns>
  private int GetTatolRecordNumber()
  {
   System.Data.SqlClient.SqlConnection 
    l_cnn=new System.Data.SqlClient.SqlConnection(this.m_cnnstr);
   l_cnn.Open();
   System.Data.SqlClient.SqlCommand 
    l_scd=l_cnn.CreateCommand();
   l_scd.CommandText="Select Count(*) From Customers";
   System.Data.SqlClient.SqlDataReader 
    l_sdr=l_scd.ExecuteReader();
   l_sdr.Read();
   //取出总记录数
   int l_count=l_sdr.GetInt32(0);
   l_cnn.Close();
   return l_count;
  }

  private void dgList_SortCommand(object source,
System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
  {
   string l_CurrentSort=e.SortExpression;
   //记录排序字符串
   this.ViewState["Sort"]= l_CurrentSort;
   foreach(System.Web.UI.WebControls.DataGridColumn l_dgc in
this.dgList.Columns)
   {
    /*判断是哪一列要进行排序
    以便第二次点击时是别外一个顺序
    **/
    if(l_dgc.SortExpression==l_CurrentSort)
    {
     l_CurrentSort=l_CurrentSort.Trim();
     //这里只是简单的把字段与排序关键字分开,你可以用正则表达式来做会更好
     string [] l_arr_str=l_CurrentSort.Split(new char[]{' '});
     if(l_arr_str.Length==1)//如果没有后面的排序关键字,则认为它是升序,下次则要改为降序
     {
      l_dgc.SortExpression=l_arr_str[0]+" desc";
     }
     else
     {
      if(l_arr_str[l_arr_str.Length-1].ToLower()=="asc")//如果原来为升序,则改为降序
      {
       l_dgc.SortExpression=l_arr_str[0]+" desc";
      }
      else//如果原来为降序,则改为升序
      {
       l_dgc.SortExpression=l_arr_str[0]+" asc";
      }
     }
     break;//完成排序头更改
    }
   }
   //重新从数据库中取记录并进行排序显示.
   try
   {
    ShowData();
   }
   catch(Exception ex)
   {
    this.Response.Write("<font color=red>"+ex.Message+"</font>");
   }
  }

  private void Guid_Click(object sender, System.EventArgs e)
  {
   try
   {
    setGuide(sender);
    ShowData();
   }
   catch(Exception ex)
   {
    this.Response.Write("<font color=red>"+ex.Message+"</font>");
   }
  }
  
  /// <summary>
  /// 这是用来显示导行栏中每个元素的状态
  /// </summary>
  /// <param name="sender">表示是按的那一个导行栏元素的按钮,如果不是由导行栏触发,则传null值</param>
  private void setGuide(object sender)
  {
   int m_iTotalPage =
Convert.ToInt32(System.Math.Ceiling(Convert.ToDouble((int)this.ViewState["TotalRecord"])/Convert.ToDouble(this.RecordPerPage)));

   if(m_iTotalPage<(int)this.ViewState["CurrentPg"])
    this.ViewState["CurrentPg"]=1;
   if(sender==this.LinkButtonFirst)
   {
    this.ViewState["CurrentPg"]=1;
   }
   if(sender==this.LinkButtonNext)
   {
    this.ViewState["CurrentPg"]=(int)this.ViewState["CurrentPg"]+1;
   }
   if(sender==this.LinkButtonPreview)
   {
    this.ViewState["CurrentPg"]=(int)this.ViewState["CurrentPg"]-1;
   }
   if(sender==this.LinkButtonLast)
   {
    this.ViewState["CurrentPg"]=m_iTotalPage;
   }
   this.LinkButtonFirst.Enabled=!((int)this.ViewState["CurrentPg"]==1);
   this.LinkButtonPreview.Enabled=!((int)this.ViewState["CurrentPg"]==1);
  
this.LinkButtonLast.Enabled=!((int)this.ViewState["CurrentPg"]==m_iTotalPage);
  
this.LinkButtonNext.Enabled=!((int)this.ViewState["CurrentPg"]==m_iTotalPage);
  }

  private void lkbDel_Click(object sender, System.EventArgs e)
  {
   /*
    *  下面是用来确定有哪些记录被选种要删除的.
    *   由于CustomerID是Char类型的,
    *   所以用如下形式来收集该字符串以便在构建删除语句的时候用
    *   "'DDFG','CCFE','FDDD'"
    * */
   string l_str_id="";
   foreach(System.Web.UI.WebControls.DataGridItem l_dgl in this.dgList.Items)
   {
    //chkselect是每个记录项的ID,记住,这是服务器端的ID,不是客户端的ID.
    System.Web.UI.Control l_ct=l_dgl.Cells[0].FindControl("chkselect");
    if(l_ct!=null)
    {
     //下面语句是判断是否记录项的checkbox框初选种
     if(((System.Web.UI.WebControls.CheckBox)l_ct).Checked)
     {
      if(l_str_id=="")
       l_str_id="'"+this.dgList.DataKeys[l_dgl.ItemIndex].ToString()+"'";
      else
       l_str_id+=",'"+this.dgList.DataKeys[l_dgl.ItemIndex].ToString()+"'";
     }
    }
   }
   /*
    * 下面语句是用来删除所选种的ID,"CustomerID"是CustomerID的关键字.
    * */
   try
   {
    if(l_str_id!="")
    {
     System.Data.SqlClient.SqlConnection 
      l_cnn=new System.Data.SqlClient.SqlConnection(this.m_cnnstr);
     l_cnn.Open();
     System.Data.SqlClient.SqlCommand 
      l_scd=l_cnn.CreateCommand();
     l_scd.CommandText="Delete From Customers where CustomerID in ("
      +l_str_id+")";
     l_scd.ExecuteNonQuery();
    }
    /*
     * 删除记录后,要重新计算记录数
     * 及重新显示记录.
     * */
    this.ViewState["TotalRecord"]=GetTatolRecordNumber();
    setGuide(null);
    ShowData();
   }
   catch(Exception ex)//这是发生错误后所报的错误
   {
    this.Response.Write("<font color=red>"+ex.Message+"</font>");
   }
  }
}
}


- 作者: 柯从华 2005年03月30日, 星期三 17:16  回复(0) |  引用(0) 加入博采
 如何发布asp.net的web程序 1.打开VS.NET开发环境;
2."文件"->"新建"->"项目";
3."项目类型"选"安装和部署项目","模板"选"Web安装项目",然后填写"名称"和"位置",最后"确定";
4.鼠标右击"解决方案",选择"添加"->"Web上现有的项目",然后根据屏幕提示选择要发布的项目;
5.右击"Web应用程序文件",选择"添加"->"项目输出";
6.在"添加项目输出组"对话框中选择"主输出"和"内容文件",最后"确定";
7."生成"->"生成项目",完成后生成的安装程序在第3步所指定的文件夹下,运行setup即可发布;

当然,发布的机器上必须安装好.net framework和iis.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值