代码改变世界

微软暑期项目时-技术篇2

2010-03-22 14:31  三皮开发时  阅读(263)  评论(0)    收藏  举报

目录:

1.万能数据库分页(存储过程)

2.DataList分页

3.字串超过自定义范围用...来标识

4.小技巧  ctrl+a ,ctrl+k,f

5.gridView 细节

6.几种数据控件获取其值

7.DataList,ListView 加入行样式

8.数据控件在原有获取的DataSet上新增列 并赋值

9.session和hashtable 秒用   例如购物车~

---------------------------------------------------------------------------------------------------------------------------------------------------

1.万能数据库分页

--/*-----存储过程 分页处理 孙伟 2005-03-28创建 -------*/
--/*-----存储过程 分页处理 浪尘 2008-9-1修改----------*/

--/*----- 对数据进行了2分处理使查询前半部分数据与查询后半部分数据性能相同 -------*/

alter PROCEDURE [dbo].[up_Pager]
(
@tblName     nvarchar(200),        ----要显示的表或多个表的连接
@fldName     nvarchar(500) = '*',    ----要显示的字段列表
@pageSize    int = 10,        ----每页显示的记录个数
@page        int = 1,        ----要显示那一页的记录
@fldSort    nvarchar(200) = null,    ----排蜃侄瘟斜砘蛱跫?
@Sort        bit = 0,        ----排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')
@strCondition    nvarchar(1000) = null,    ----查询条件,不需where
@ID        nvarchar(150),        ----主表的主键
@Dist                 bit = 0,           ----是否添加查询字段的 DISTINCT 默认0不添加/1添加
@pageCount    int = 1 output,            ----查询结果分页后的总页数
@Counts    int = 1 output                ----查询到的记录数
)
AS
SET NOCOUNT ON
Declare @sqlTmp nvarchar(1000)        ----存放动态生成的SQL语句
Declare @strTmp nvarchar(1000)        ----存放取得查询结果总数的查询语句
Declare @strID     nvarchar(1000)        ----存放取得查询开头或结尾ID的查询语句

Declare @strSortType nvarchar(10)    ----数据排序规则A
Declare @strFSortType nvarchar(10)    ----数据排序规则B

Declare @SqlSelect nvarchar(50)         ----对含有DISTINCT的查询进行SQL构造
Declare @SqlCounts nvarchar(50)          ----对含有DISTINCT的总数查询进行SQL构造

declare @timediff datetime  --耗时测试时间差
select @timediff=getdate()

if @Dist  = 0
begin
    set @SqlSelect = 'select '
    set @SqlCounts = 'Count(*)'
end
else
begin
    set @SqlSelect = 'select distinct '
    set @SqlCounts = 'Count(DISTINCT '+@ID+')'
end


if @Sort=0
begin
    set @strFSortType=' ASC '
   set @strSortType=' DESC '
end
else
begin
   set @strFSortType=' DESC '
   set @strSortType=' ASC '
end

--------生成查询语句--------
--此处@strTmp为取得查询结果数量的语句
if @strCondition is null or @strCondition=''     --没有设置显示条件
begin
  set @sqlTmp =  @fldName + ' From ' + @tblName
   set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName
   set @strID = ' From ' + @tblName
end
else
begin
   set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition
 set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition
   set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition
end

----取得查询结果总数量-----
exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
declare @tmpCounts int
if @Counts = 0
   set @tmpCounts = 1
else
   set @tmpCounts = @Counts

   --取得分页总数
    set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize

    /**//**//**//**当前页大于总页数 取最后一页**/
   if @page>@pageCount
        set @page=@pageCount

    --/*-----数据分页2分处理-------*/
   declare @pageIndex int --总数/页大小
   declare @lastcount int --总数%页大小 

    set @pageIndex = @tmpCounts/@pageSize
   set @lastcount = @tmpCounts%@pageSize
   if @lastcount > 0
        set @pageIndex = @pageIndex + 1
    else
       set @lastcount = @pagesize

    --//***显示分页
   if @strCondition is null or @strCondition=''     --没有设置显示条件
   begin
     if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2   --前半部分数据处理
          begin 
               if @page=1
                  set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName                        
                       +' order by '+ @fldSort +' '+ @strFSortType
              else
               begin
                 if @Sort=1
                   begin                    
                    set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                        +' where '+@ID+' <(select min('+ @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
                        +' order by '+ @fldSort +' '+ @strFSortType+') AS TBMinID)'
                        +' order by '+ @fldSort +' '+ @strFSortType
                   end
                  else
                 begin
                set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                       +' where '+@ID+' >(select max('+ @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
                     +' order by '+ @fldSort +' '+ @strFSortType+') AS TBMinID)'
                      +' order by '+ @fldSort +' '+ @strFSortType 
                end
               end    
          end
       else
          begin
         set @page = @pageIndex-@page+1 --后半部分数据处理
                if @page <= 1 --最后一页数据显示                
                 set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                       +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType 
             else
                if @Sort=1
                    begin
                  set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                      +' where '+@ID+' >(select max('+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
                       +' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)'
                      +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
                   end
                   else
                 begin
                    set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                      +' where '+@ID+' <(select min('+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
                       +' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)'
                        +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType 
                    end
            end
    end

    else --有查询条件
    begin
       if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2   --前半部分数据处理
       begin
               if @page=1
                   set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName                        
                      +' where 1=1 ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType
              else if(@Sort=1)
               begin                    
                   set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                        +' where '+@ID+' <(select min('+ @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
                        +' where (1=1) ' + @strCondition +' order by '+ @fldSort +' '+ @strFSortType+') AS TBMinID)'
                       +' '+ @strCondition +' order by '+ @fldSort +' '+ @strFSortType
              end
              else
               begin
                   set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                       +' where '+@ID+' >(select max('+ @ID +') from ('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
                      +' where (1=1) ' + @strCondition +' order by '+ @fldSort +' '+ @strFSortType+') AS TBMinID)'
                       +' '+ @strCondition +' order by '+ @fldSort +' '+ @strFSortType 
               end           
        end
        else
        begin 
            set @page = @pageIndex-@page+1 --后半部分数据处理
            if @page <= 1 --最后一页数据显示
                    set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                        +' where (1=1) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType                     
            else if(@Sort=1)
                   set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                      +' where '+@ID+' >(select max('+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
                       +' where (1=1) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)'
                       +' '+ @strCondition+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType    
            else
                   set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                        +' where '+@ID+' <(select min('+ @ID +') from('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
                       +' where (1=1) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TBMaxID)'
                      +' '+ @strCondition+' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType            
       end    
    end

exec sp_executesql @strTmp  --执行@strTmp, sp_executesql 执行sql.

-------

exec up_Pager
'tb_Vote',--表名
'*',--查询的字段
5,--每行记录的个数
1,--显示那一页的记录,这里是现实第一页的记录
'voteID',--排序的字段列表或条件
1,--为排序的字段列表 排序方法 0为升序,1为降序
'and voteID%2 <> 0 or voteTitle=''定饭了没''',

--查询条件这里是显示单数和voteTitle='定饭了没'注意这里的字符串中字符串的格式: ''定饭了没'' 都是单撇号

voteID,--主表的主键
0 ----是否添加查询字段的 DISTINCT 默认0不添加/1添加

----------------------------------------------------------------------------------------------------------------------------

 2.DataList 分页

    public void Bind()
    {
       
        //获取当前页码
        int curpage = Convert.ToInt32(lblPage.Text);
        //使用PageDataSource类实现DataList控件分页功能

        PagedDataSource ps = new PagedDataSource();
        //配置dataset
        SqlConnection con = new SqlConnection(str);
        SqlCommand cmd = new SqlCommand("select * from tb_Vote", con);
        SqlDataAdapter adapt = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        adapt.Fill(ds);
        //填充数据源..
        ps.DataSource = ds.Tables[0].DefaultView;
        //允许分页
        ps.AllowPaging = true;

        //显示分页页码的数量
        ps.PageSize = 3;

        // 显示页面的索引 假如将最后页的事件里加入 ps.CurrentPageIndex=0; 那么点击最后页 会跳到首页.
        ps.CurrentPageIndex =  curpage-1;

        //启用控件
        lnkbtnOne.Enabled = true;//第一页
        lnkbtnNext.Enabled = true;//下一页
        lnkbtnUp.Enabled = true;//上一页
        lnkbtnBack.Enabled = true;//最后页

        //如果当前页为第一页时
        if (curpage == 1)
        {
            //不启用第一页按钮
            lnkbtnOne.Enabled = false;
            //不启用上一页按钮
            lnkbtnUp.Enabled = false;
        }
        //如果当前页为最后页
        if (curpage == ps.PageCount)
        {
            //不穷下一页按钮
            lnkbtnNext.Enabled = false;
            //不启用下一页按钮
            lnkbtnBack.Enabled = false;
        }

        //显示分页的总页数
        labBackPage.Text = ps.PageCount.ToString();

        //绑定
        DataList1.DataSource = ps;
        DataList1.DataKeyField = "voteID";
        DataList1.DataBind();
    }

 


    //第一页
    protected void lnkbtnOne_Click(object sender, EventArgs e)
    {
        lblPage.Text = "1";
        DataList1.EditItemIndex = -1;
        Bind();

    }

    //上一页
    protected void lnkbtnUp_Click(object sender, EventArgs e)
    {
        lblPage.Text = Convert.ToString(Convert.ToInt32(lblPage.Text) - 1);
        DataList1.EditItemIndex =- 1;
        Bind();


    }

    //下一页
    protected void lnkbtnNext_Click(object sender, EventArgs e)
    {
        lblPage.Text = Convert.ToString(Convert.ToInt32(lblPage.Text )+1);
        DataList1.EditItemIndex = -1;
        Bind();

    }

    //最后页
    protected void lnkbtnBack_Click(object sender, EventArgs e)
    {

        //之前写的有错误,最后页(页总数)赋予给当前页
        lblPage.Text = labLastText.Text;
        DataList1.EditItemIndex = -1;
        Bind();
        DataList1.EditItemIndex = -1;
        Bind();

    }

//注:如果有什么编辑的话,下一页后还是会有编辑状态 那么加入 DataList1.EditIndex=-1(负1)  喔了.

-----------------------------------------------------------------------------------------------------------------------------------------------

3.控件的小使用:控制文本长度 如果超过自定义范围用...代替,放上去时显示所有信息

<asp:Label ID="Label2" runat="server" Text='<%#(Eval("voteTitle").ToString().Length>7)?Eval("voteTitle").ToString().Substring(0,7)+"...":Eval("voteTitle") %>' ToolTip='<%#Bind("voteTitle") %>'></asp:Label>

上段代码为DataList代码.

 4.XML代码或cs里代码 全选 ctrl+K,F  排序

-----------------------------------------------------------------------------------------------------------------------------

 5.<asp:TemplateField HeaderText ="单价">
                                     <HeaderStyle HorizontalAlign="Center" />
                                     <ItemStyle HorizontalAlign="Center" />
                                        
                                         <ItemTemplate >
                                            <%#Eval("price")%>¥
                                         </ItemTemplate>   
                                     </asp:TemplateField>

-----------------------------------------------------------------------------------------------------------------------------------------------

6.((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text.Trim();//GridView控件寻值

((TextBox)e.Item.FindControl("txtEmail")).Text.Trim();//ListView 在ItemCommand下形式

((TextBox)e.Item.FindControl("txtEmail")).Text;//DataList控件寻值 ItemCommand 下形式

------- 介绍的是:GridView 没有EditItemTemplate 所以ItemCommand 也就写不出编辑框形式,只能用他提供的Edit事件,ListView 和DataList 区别是在 ListView不可以在ItemCommand下写出编辑框 没有e.Item.ItemIndex属性 所以编辑框/select框  的弹出形式只能用他自己提供的事件下写ListView1.EditIndex = e.NewEditIndex;Bind(); 然而在继续更新,取消,删除,等附加操作时可以在ItemCommand下写 eg: 更新 按钮属性 CommandName=“ed” ItemCommand事件下

if(e.CommandName=="ed").....除此之外ListView 比DataList多几个Template  eg:InsertTemplate ...
     

另,介绍下控件属性弹出框

 WebControl webcontrol = ((LinkButton)e.Item.FindControl("lbtnDelete")) as LinkButton;

 Jxmstc.Utility.MessageBox.ShowConfirm(webcontrol, "角色还有用户组关联,确定删除?");

//引用方法--哟,不错哦

public static void ShowConfirm(System.Web.UI.WebControls.WebControl Control, string msg)

        {

            Control.Attributes.Add("onclick", "return confirm('" + msg + "');");

        }

-----------------------------------------------------------------------------------------------------------------------------------------

7.DataList,ListView 加入行样式方法

<tr onmouseover="this.style.backgroundColor='#3366FF'"   onmouseout="this.style.backgroundColor='' ">

***

<td>**</td>

<td>**</td>

**

<tr>

只要在你想要操作的模板下 在tr 加入属性  

onmouseover="this.style.backgroundColor='#3366FF'"   onmouseout="this.style.backgroundColor='' "   

既可.

---------------------------------------------------------------------------------------------------------------------------------------

8.

        SqlConnection con = new SqlConnection(str);
        SqlCommand cmd = new SqlCommand("select * from tb_Vote", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);

        DataColumn c1 = new DataColumn("NewColumn");
        ds.Tables[0].Columns.Add(c1);
        int i = 1;
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            row["NewColumn"] = "NewAdd"+i.ToString();
            i++;
        }
        GridView1.DataSource = ds.Tables[0].DefaultView;
        GridView1.DataBind();
        DataList1.DataSource = ds.Tables[0].DefaultView;
        DataList1.DataBind();
       

        //DataTable dt = new DataTable();
        //DataColumn c1 = new DataColumn("voteID");
        //DataColumn c2 = new DataColumn("voteTitle");
        //DataColumn c3 = new DataColumn("voteContent");
        //DataColumn c4 = new DataColumn("again add column");
        //dt.Columns.Add(c1);
        //dt.Columns.Add(c2);
        //dt.Columns.Add(c3);
        //dt.Columns.Add(c4);
       
        //DataRow row;
        //for (int i = 1; i <= 3; i++)
        //{
        //    row = dt.NewRow();
        //    row["voteID"] = i.ToString();
        //    row["voteTitle"] = "voteTitle" + i.ToString();
        //    row["voteContent"] = "voteContent" + i.ToString();
        //    row["again add column"] = "asdf" + i.ToString();
        //    dt.Rows.Add(row);
        //}

        //GridView1.DataSource = dt.DefaultView;
        //GridView1.DataBind();

        //DataList1.DataSource = dt.DefaultView;
        //DataList1.DataBind();

---------------------------------------------------------------------------------------------------------------------------------------------------10.

   if (Session["1"] == null)
        {
            hash = new Hashtable();
            hash.Add("一", 1);
            Session["1"] = hash;
            s1 = hash["一"].ToString();

        }
        else
        {
            hash = (Hashtable)Session["1"];
            if (hash.Contains("一"))
            {
                int count = Convert.ToInt32(hash["一"].ToString());
                hash["一"] = count + 1;
            }
 
        }