• 【转】小知识5


    1.使用AspNetPager给数据由数据源控件提供的数据控件实现分页(本例以DataList为例,数据源控件为SqlDataSource)

    ①将DataList,两个SqlDataSource(为什么要两个后面会说),AspNetPager拖入页面里。

    ②配置其中一个SqlDataSource2,然后将DataList的数据源指向SqlDataSource2,这时DataList会根据SqlDataSource2的SelectCommand="SELECT * FROM [Student]" (比方说是这样设置的)自动生成相应的<ItemTemplate>。

    ③然后设置SqlDataSource1如下:

     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 

     ConnectionString="<%$ ConnectionStrings:aspnetpagerConnectionString %>" 

     SelectCommand="with Temptable as (select row_number() over (order by id) as 行号,* from student ) select * from Temptable where 行号 between @StartIndex and @EndIndex">

       <SelectParameters>

         <asp:ControlParameter ControlID="AspNetPager1" DefaultValue="1" Name="StartIndex"

           PropertyName="StartRecordIndex" Type="Int32" />

         <asp:ControlParameter ControlID="AspNetPager1" DefaultValue="10" Name="EndIndex"

           PropertyName="EndRecordIndex" Type="Int32" />

        </SelectParameters>

     </asp:SqlDataSource>

    注意SelectCommand里写的分页语句是关键(sql分页语句),其中@StartIndex和@EndIndex是开始和结束的参数,非常重要的一点是这两个参数的值是由AspNetPager控件的两个属性StartRecordIndex和EndRecordIndex提供的,而这两个属性是在SqlDataSource1的<SelectParameters>(参数属性,其他还有<DeleteParameters><UpdateParameters><InsertParameters>|在这些参数属性内可以选择ControlParameter,CookieParameter,FormParameter,Parameter,ProfileParameter,SessionParameter,QueryStringParameter|如果你对其设置不是很在行,你可以通过图形界面来设置)里指明的,这里指明的有ControlID="AspNetPager1",Name="StartIndex"(很重要,而且要与分页语句里的参数名相同)PropertyName="StartRecordIndex"(参数值由AspNetPager1的StartRecordIndex属性值提供)

    ④然后还必须设置AspNetPager1的RecordCount属性(绑定的表里一共有多少条记录),这里用LINQ统计的,如下:

       protected void Page_Load(object sender, EventArgs e)

            {

                if (!IsPostBack)

                {

                    DataClasses1DataContext db = new DataClasses1DataContext();

                    var result = db.Student.Count();

                    AspNetPager1.RecordCount = result;

                }

            }

    ⑤这样设置完之后再将DataList1的DataSourceID="SqlDataSource1"就可以删除SqlDataSource2了,之所以要用SqlDataSource2是因为,如果先设置DataSourceID="SqlDataSource1"的话,由于SqlDataSource1的SelectCommand没有明确要显示哪些字段,所以将不会自动生成相应的<ItemTemplate>。

    补:也可以使用存储过程来实现,只要将SelectCommand="存储过程名"再加一个属性SelectCommandType="StoredProcedure"就可以了,不过存储过程里的参数名也必须等于此处是StartIndex和EndIndex。至于不用数据源控件而在程序中给数据控件配置数据源,这里就不说了,需要设置AspNetPager的AspNetPager1_PageChanged事件是不同之处。至于AspNetPager的样式及跳转到哪一页等其他效果,可以下载AspNetPager的官方示例,都有很详细的说明。

    2.如果像上面那样用会有个疑问:用数据源控件给数据控件提供数据源,怎么控制其绑定的执行?默认是产生页面或回发时都会执行绑定,如何才能..比如说只有我的一个按钮的单击事件才能使绑定执行。(只要适时的设置数据控件的DataSourceID即可):

    Protected void Page_Load(object sender,EventArgs e)

    {

        Repeater1.DataSourceID="";      在产生页面或回发时将其DataSourceID设为空

    }

    Protected void Button1_Click(object sender,EventArgs e)

    {

       Repeater1.DataSourceID="SqlDataSource3";  单击时再设置其DataSourceID

    }

    3.在VS中如果遇到光标占位的情况,可以试着按一下Insert键

    4.设置网站在浏览器上的个性小图标:http://hi.baidu.com/yimeng3025/blog/item/245d602b93609624d42af18e.html

    http://www.cnblogs.com/yangbin1005/archive/2008/08/15/1268714.html

    http://www.cnblogs.com/whitetiger/archive/2008/02/18/1072290.html

    5.数据控件绑定数据时应该考虑的顺序

    1.手工绑定 Page_Load(){ 绑定 }                             回发后希望重新绑定数据

    2.手工绑定 Page_Load(){ if(!IsPostBack){绑定} }  回发后不希望重新绑定数据,希望得到回发前的数据

    3.使用数据源控件                                                     几乎能满足各种情况

    如果绑定数据的控件是单独使用那么2与3是等同的,因为ASP.NET会为其保存状态,即便你回发后没再重新绑定数据。

    但如果绑定数据的控件位于Repeater或GridView等控件里,那么2回发后不但不会得到回发前的数据,而且由于其实重新动态生成,其连数据都不会有(如果在相应的事件里再为其绑定数据就另当别论了)。但3回发后则能得到回发前的数据,然后再重新动态生成的同时重新绑定数据。

    所以2与3不总是等同的。

    http://www.cnblogs.com/hanmeimei/archive/2011/02/18/RadomOnlineExam.html

    http://topic.csdn.net/u/20110217/00/7bae254f-447b-4f1c-8c43-c6ff794f40e0.html?seed=422573368&r=71841771#r_71841771

    6.GridView通过使用数据源控件来享受自带的编辑编辑排序分页时需要回发,不能在UpdatePanel里面(貌似可以在UpdatePanel里面,反正出了问题的话,这方面改改试试)   但编辑删除失效的话必须考虑是否设置了DataKeyNames,而不是像http://www.ljf.cn/2007/7/Item17687.html说的那样。

    7.在Repeater的HeaderTemplate和FooterTemplate中找控件

    http://hi.baidu.com/4402957/blog/item/992746fbc29e5a1e6d22ebdc.html

    http://www.cnblogs.com/JeffYang/archive/2007/07/23/828724.html

    8.updatepanel回调时会回调所有的数据,这些数据到达服务器端后会经历一个完整的ASP.NET页面生命周期,与回发不同之处就是只无刷新的更新updatepanel内部的控件。

    所以使用updatepanel只是表面上实现了Ajax回调效果,但效率上不能替代Ajax回调。

    http://developer.51cto.com/art/200907/140180.htm

    http://hi.baidu.com/ustc10/blog/item/3795b61037c7c6fbc3ce799f.html

    9.Global.asax文件

    http://shirlly.iteye.com/blog/518955

    http://www.cnblogs.com/caoxch/archive/2006/11/22/568342.html

    相关知识:

    http://kendezhu.iteye.com/blog/84494968 9

    10.使用Linq to SQL的ExecuteQuery()返回的IEnumerable<T>不能进行多次(两次以上)结果集查询(报的错是无法枚举查询结果多次)    且查询时不能释放上下文DataContext    可先将结果缓存到IList对象中

    http://www.1000year.com/blog/122.htm

    11.Linq实现select  from where in()

    http://social.msdn.microsoft.com/Forums/en/linqprojectgeneral/thread/fda19d75-b2ac-4fb1-801b-4402d4bd5255

    http://www.cnblogs.com/chriskwok/archive/2010/04/03/LINQ.html

    也可以用ExecuteQuery()的方式实现,但注意in()里的东东,貌似不能使用参数的方式,老是查不出,只能使用拼接字符串的方式,就如同select top一样,不知SQL Server2008解决这一问题了没有,列位谁知道劳您通知一声。

    12.集合多次添加同一引用类型的实例(如数组,集合等)的机制

     集合多次添加该引用类型时会不断的添加它的地址(该集合内的元素个数也会增加,但都指向该引用类型的同一对象,所以只要该对象一变,遍历集合时所有的元素都会变(因为这些元素指向的对象变了))

    13.注意like语句那单引号的位置,要放在通配符的外面

    http://www.cnblogs.com/ugoer/archive/2006/09/15/505596.html

    14.List<T>的GetRange(int index,int count)方法

    http://msdn.microsoft.com/zh-cn/library/21k0e39c(v=vs.85).aspx

      protected void Button1_Click(object sender, EventArgs e)

        {

            string[] str = new string[] { "1", "2", "3", "4", "5", "6", "7", "8" };

            List<string> list = new List<string>(str);     将实现了IEnumerable<T>的集合或数组中的元素复制到list里

                                                                                 很多泛型集合类型的构造函数都有这个功能

            string[] a = list.GetRange(2, 4).ToArray();    从第2位开始截取4个元素

            foreach (var item in a)

            {

                TextBox1.Text += item;

            }

        }

    15.List<T>的Sort()方法

    http://msdn.microsoft.com/zh-cn/library/w56d4y5z.aspx

    http://www.cnblogs.com/azure/archive/2009/08/01/ASP_NET_LIST_SORT_FIND_DELEGATE.html|的9楼

     protected void Button1_Click(object sender, EventArgs e)

        {

            List<pp> list = new List<pp>();

            pp p1=new pp();

            p1.A=0.1;

            p1.B=3;

            pp p2=new pp();

            p2.A=0.3;

            p1.B=1;

            pp p3=new pp();

            p3.A=0.2;

            p3.B=2;

            TextBox1.Text="0.10.30.2";

            list.Add(p1);

            list.Add(p2);

            list.Add(p3);

            //list.Sort((u, v) => u.A < v.A); 无法将 lambda 表达式 转换为类型“System.Collections.Generic.IComparer<Test_Test7.pp>”,原因是它不是委托类型

            //list.Sort();    必须至少有一个对象实现 IComparable(元素是简单数值类型或字符串的话除外)

            list.Sort((v1, v2) => { return Comparer<double>.Default.Compare(v1.A, v2.A);}); //按pp类的A字段从小到大排序

            foreach (var item in list)

            {

                TextBox2.Text += item.A.ToString();

            }

        }

    16.VS设断点调试的时候最好把updatepanel去掉,有updatepanel也不利于异常的调试。通常建议updatepanel只有在完成网站时才运用,有时在平常运行网站(不是调试)时,如果代码有错误,由于updatepanel的存在,将不会看到异常,尤其是用chrome这种只有"审查元素"才会看到javascript错误的浏览器的时候。

    17.Chrome浏览器可以通过F11来切换全屏与非全屏。最近发现IE8也可以,想许多其他浏览器也可以吧。

    18.由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭。

    http://blog.csdn.net/liulun/archive/2008/01/24/2064048.aspx

    19.无法打开用户默认数据库 登录失败

    如果不小心修改了默认登录数据库,而不幸的是该数据库被分离了,可以使用以下命令为某帐号修改默认数据库为master,下面两条链接是参考,都有错误,我结合了一下

    osql /E /d"master" /Q"exec sp_defaultdb N'BUILTINAdministrators', N'master'"

    http://hi.baidu.com/mani/blog/item/08292e97f144096655fb96ae.html

    http://blog.csdn.net/cnbird2008/archive/2007/09/27/1802375.aspx

  • 相关阅读:
    《疯狂Java讲义》(二十) ---- 系统相关类
    《疯狂Java讲义》(十九)---- 与用户交互
    《疯狂Java讲义》(十八)---- JAR文件
    《疯狂Java讲义》(十七)---- 对象与垃圾回收
    《疯狂Java讲义》(十六)---- 枚举类
    《疯狂Java讲义》(十五)---- 内部类
    疯狂Java讲义(十四)---- 抽象类和接口
    疯狂Java讲义(十三)---- 类成员
    疯狂Java讲义(十二)---- equals
    Algorithm: Euclid's algorithm of finding GCD
  • 原文地址:https://www.cnblogs.com/gates/p/3461998.html
Copyright © 2020-2023  润新知