zoukankan      html  css  js  c++  java
  • 【转】小知识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

  • 相关阅读:
    入门菜鸟
    FZU 1202
    XMU 1246
    Codeforces 294E Shaass the Great 树形dp
    Codeforces 773D Perishable Roads 最短路 (看题解)
    Codeforces 814E An unavoidable detour for home dp
    Codeforces 567E President and Roads 最短路 + tarjan求桥
    Codeforces 567F Mausoleum dp
    Codeforces 908G New Year and Original Order 数位dp
    Codeforces 813D Two Melodies dp
  • 原文地址:https://www.cnblogs.com/gates/p/3461998.html
Copyright © 2011-2022 走看看