有一定项目经验的人麻烦说下,能者多说。
问题一:大家开发实际项目有没有常常数据绑定控件,经如DataList一类的。问题二:如果不用数据绑定控件。像回到asp编程,用for,while等语体,输入。我的做法如下,查询数据库传出数据(talbe),
然后,前台用for(int i=1;i<talbe.rows.count;i++)这样输出。但有一个问题,需要一个表格才行。我这样弄using System;
using System.Web.UI.WebControls;public partial class Default4 : System.Web.UI.Page
{
    public Table talbe;//这样子声明表格
    protected void Page_Load(object sender, EventArgs e)
    {
        //省去代码
    }
    protected void 分页事件()
    {
        //省去代码
    }}
我现在有点不明白的就是,这样表格的生命周期是怎样子的,当访页关闭时,系统会不会自动销毁
麻烦大家详细说一说,分可再加。多谢

解决方案 »

  1.   

    你在这个页面里定义的Table,这个页面生成完了(如果不是持久化的页面),这个Table就没有了
      

  2.   

    1、早期用列表类的服务器控件多,现在基本不用了
    2、asp编程一般是把服务器代码、html代码嵌在一起的,所以没必要后台声明Table
      

  3.   

    第一个,常用的有reporter,来显示table其他的不常用,做管理类型的用grid,其他的不常用
    第二个<table cellpadding="0" cellspacing="0" class="alt tb_all">
            <tr>
                <th>订单号</th>
                <th>状态</th>
                <th>订单金额</th>
                <th>佣金</th>
                <th>创建时间</th>
            </tr>
            <%System.Collections.Generic.IList<FLFlightOrderInfo> orderInfo = FlightOrders; %>
            <% if(orderInfo != null) { %>
            <%foreach (FLFlightOrderInfo item in orderInfo){%>
            <tr>
                <td>
                    <div>
                        <a href="javascript:TabView('详情','/Channel/Order/Detail.aspx?id=<%=GetOrderIdBySerNo(item.SerialId) %>');">
                            <%=item.SerialId %>
                        </a>
                    </div>
                </td>
                <td><%=GetEnumDescByStatus(item.OrderStatus) %></td>
                <td class="money"><%=item.AmountTotal %></td>
                <td class="money"><%=(item.AmountTotal - item.PolicyPrice) %></td>
                <td><%=item.CreateDate.ToString("yyyy/MM/dd") %> <%=item.CreateDate.ToString("HH:mm:ss") %></td>
            </tr>
            <%}%>
            <%}%>
            <tr>
                <td colspan="3"></td>
                <td>佣金总额:<span class="money">¥<%=Amount %></span></td>
                <td></td>
            </tr>
        </table>
    这样不知道有分没,很全面了吧,谢谢楼主
      

  4.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;namespace BL.PhoneBillSettle {
        public partial class DownloadBill : System.Web.UI.Page {
            protected List<FileInfo> files = new List<FileInfo>();
            protected void Page_Load(object sender, EventArgs e) {
                string strTempPath = Server.MapPath("/TempFiles");
                DirectoryInfo dir = new DirectoryInfo(strTempPath);
                if (dir.Exists) {
                    files.AddRange(dir.GetFiles(DateTime.Now.ToString("yyyy*") + ".xlsx"));
                }
            }
        }
    }<table id="tblBill" class="tablesorter" cellspacing="1" cellpadding="4">
            <colgroup>
                <col class="col1" align="center" />
                <col class="col2" />
                <col class="col3" />
                <col class="col4" />
            </colgroup>
            <thead>
                <tr class="head">
                    <th>
                        <input type="checkbox" id="ckAll" /><input type="hidden" id="hdFN" />
                    </th>
                    <th sort="true">
                        话单文件
                    </th>
                    <th sort="true">
                        生成时间
                    </th>
                    <th>
                    </th>
                </tr>
            </thead>
            <tbody>
                <% for (int i = 0; i < files.Count; i++) { %>
                <tr class='<%=i%2==0?"odd":"even" %>'>
                    <td>
                        <input type="checkbox" fname='<%=files[i].Name %>' onclick="selectF(event)" />
                    </td>
                    <td>
                        <a href='<%="/TempFiles/" + files[i].Name %>' target="_blank">
                            <%=files[i].Name%>
                        </a>
                    </td>
                    <td>
                        <%=files[i].CreationTime.ToString("yyyy-MM-dd HH:mm:ss")%>
                    </td>
                    <td>
                        <a href='<%="/TempFiles/" + files[i].Name %>' target="_blank">下载</a>
                    </td>
                </tr>
                <%} %>
            </tbody>
        </table>
        <div style="margin: auto 0; width: 85%;">
            <input type="button" onclick="delBill()" value="删除" />
        </div>
      

  5.   

    我知道,我类似,所以要在后台说明一个talbe,就不知这个talbe怎样死
      

  6.   

    1、DataList类似于这种控件,重来不用,毕竟会产生太多的垃圾代码,影响访问速度和效率不说,看了就不舒服,建议在前台都不要用服务器控件。2、我个人认为,用完后记得关掉数据集就没有问题了,ds.close();这样的话,你每访问一次完就会自动关闭。
      

  7.   

    数据应该是存放于DataTable吧,DataTable是ADO.net里的数据存取方式。数据读出来存放于DataTable里,当页面卸载时会自动释放。
      

  8.   

    常用reporter
      

  9.   

    问题一 基本没有! 用的公司自主研发的框架,不需要用到VS中的控件。
    问题二 只能说是页面的生命周期吧,table是放在页面里面的。建议去百度一下。
      

  10.   

    深入研究Asp.net页面的生命周期
    介绍  
    Asp.net是微软.Net战略的一个组成部分。它相对以前的Asp有了很大的发展,引入了许多的新机制。本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好、更灵活地操纵Asp.net的作用。  
    当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件。在我们试图建立Asp.net页面的时候,这个执行周期是不必去考虑的,那样只会自讨苦吃。然而,如果被正确的操纵,一个页面的执行周期将是一道有效而且功能强大的工具。许多开发者在编写Asp.net的页面以及用户控件的时候发现,如果知道整个过程中发生了什么以及在什么时候发生将对完成整个任务起到很重要的帮助作用。下面我就向大家介绍一下一个Asp.net页面从创建到处理完成过程中的十个事件。同时,也向大家展示如何在这些事件中添加自己的代码以达到预定的效果。  
    一.初始化对象  
    一个页面的控件(以及页面本身)最初应被正确的初始化。通过在你的C#文件的构造函数中声名所有对象(如图1),页面就知道要创建多少对象以及它们的类型。一旦你在你的构造函数中声名了所有的对象,你就可以通过继承类、方法、事件或是属性访问它们。然而,如果你的一些对象是在Aspx文件中指定的一些控件,那么这些控件就没有属性可言了。同时,通过代码访问它们会产生一些意外的错误,因为这些控件实例是没有一个确定的创建顺序的(如果它们是被一起创建的)。还有,你可以通过OnInit来重载初始化事件  
    二.导入Viewstate数据  
    在初始化事件后,所有控件只可以通过它们的ID被引用访问(因为还没有相应的DOM可使用)。在LoadViewState这个事件中,所有的控件将获得它们的第一个属性:Viewstate属性。这个属性最终将被返回给服务器以判断这个页面是已经被用户访问完毕还是仍然在被用户所访问。 Viewstate属性以“名称/值”对的字符串方式被保存,它包含了控件的文本以及值等信息。该属性被存储在一个隐藏的 <input> 控件的值属性里,在请求页面时被传递。这种方式比起Asp3.0的维持、判断页面状态的方式有了很大的进步啊。还有,你可以重载 LoadViewState事件函数来对相应的控件进行值设定。  
    三.用LoadPostData处理Postback数据  
    在页面创建的这个阶段,服务器对页面上的控件提交的表单数据(在Asp.net中称postback数据)进行处理。当一个页面提交一个表单时,框架就在每个提交了数据的控件上执行一个IPostBackDataHandler接口操作。然后页面执行LoadPostData事件,解析页面,找到每个执行了IpostBackDataHandler接口操作的控件,并用恰当的postback数据更新这些控件状态。Asp.net是通过用 NameValue集中的“名称/值”对和每个控件的唯一的ID匹配来实现这一操作的。所以,在Asp.net的页面上每个控件必须有一个唯一的ID,不可以出现几个控件共有ID的情况。即使是用户自定义的一些控件,框架也会赋予它们各自唯一的ID的。在LoadPostData事件后,就要执行下面的 RaisePostDataChanged事件了。  
    四.导入对象  
    在Load事件中,对象都实例化了。所有的对象第一次被布置在DOM页面(在Asp.net中称控件树)里了并且可以通过代码或是相关的位置被引用。这样,对象就可以很容易的从客户端获得诸如宽度、高度、值、可见性等在Html中的属性值。在Load事件中,当然还有像设置控件属性等操作的发生。这个过程是整个生命周期中最重要、最主要的,你可以通过调用OnLoad来重载Load事件  
    五.RaisePostBackChanged事件  
    就像在上面提到的那样,这个事件是发生在所有的控件执行了IPostBackDataHandler接口操作并被正确的postback数据更新后的。在这个过程中,每个控件都被赋予一个布尔值来标志该控件有没有被更新。然后,Asp.net就在整个页面上寻找任何已被更新过的控件并执行 RaisePostDataChanged事件操作。不过,这个事件是要在所有的控件都被更新了以及Load事件完成后才进行的。这样就保证了一个控件在被postback数据更新前,别的控件在RaisePostDataChanged事件中是不会被手动改变的。  
    六.处理客户端PostBack事件  
    当由postback数据在服务器端引起的事件都完成后,产生postback数据的对象就执行RaisePostBackEvent事件操作。可是会有这种情况,由于一个控件状态的改变使得它将表单返回给服务器或是用户点击了提交按钮使得表单返回给服务器。在这种情况下应该有相应的处理代码来体现事件驱动这一面向对象(OOP)编程原则。由于要满足呈现给浏览器的数据的精确性要求,在一系列postback事件中RaisePostBackEvent事件是最后发生的。  
    在postback过程中改变的控件不应在执行功能函数被调用后更新。也就是说,任何由于一个预期的事件而改变的数据应该在最终的页面上被反映出来。你可以通过修改RaisePostBackEvent函数来满足你的要求  
    七.预先呈递对象  
    可以改变对象并将改变保存的最后时刻就是这一步――预先呈递对象。这样,你可以在这一步对控件的属性、控件树结构等作出最后的修改。同时还不用考虑 Asp.net对其作出任何改变,因为此时已经脱离了数据库调用以及viewstate更新了。在这一步之后,对对象的所有修改将最终被确定,不能被保存到页面的viewstate中了。你可以通过OnPreRender来重载这一步。  
    八.保存ViewState  
    所有对页面控件的修改完成后viewstate就被保存了。对像的状态数据还是保留在隐藏的 <input> 控件里面,呈现给Html的对象状态数据也是从这里取得的。在SaveViewState事件中,其值能被保存到viewstate对象,然而这时在页面上控件的修改却不能了。你可以用SaveViewState来重载这一步  
    九.呈递给Html  
    运用Html创建给浏览器输出的页面的时候Render事件就发生了。在Render事件过程中,页面调用其中的对象将它们呈递给Html。然后,页面就可以以Html的形式被用户的浏览器访问了。当Render事件被重载时,开发者可以编写自定义的Html代码使得原先生成的Html都无效而按照新的 Html来组织页面。Render方法将一个HtmlTextWriter对象作为参数并用它将Html在浏览器上以网页的形式显示。这时仍然可以做一些修改动作,不过它们只是客户端的一些变化而已了。你可以重载Render事件  
    十.销毁对象  
    在呈递给Html完成后,所有的对象都应被销毁。在Dispose事件中,你应该销毁所有在建立这个页面时创建的对象。这时,所有的处理已经完毕,所以销毁任何剩下的对象都是不会产生错误的,包括页面对象。你可以重载Dispose事件,见图6。  
    全文总结  
    以上就是Asp.net页面生命周期中的十个事件。每次我们请求一个Asp.net页面时,我们都经历着同样的过程:从初始化对象到销毁对象。通过了解 Asp.net页面的内部运行机制,我相信大家在编写、调试代码的时候会更加游刃有余的
      

  11.   

    楼主我建议你可以用Repeater ,这样是不会产生什么垃圾代码的
      

  12.   

    看情况,gridview、datalist、repeater都可以,repeater比较灵活点,常用。
    如果后台用表格的话可以用HtmlTable控件,就是前台写上<table id="table1" border="1" runat="server"></table>,然后后台操控,举例如下:
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using ZhongCong;public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    getData();
    }
    protected void getData()
    {
    SqlData md = new SqlData("select top 100 * from 基本信息");
    md.ExecuteReader();
    HtmlTableRow trHead = new HtmlTableRow();
    trHead.Attributes.CssStyle.Add("background", "#999");
    HtmlTableCell[] tdHead = new HtmlTableCell[md.dr.FieldCount];
    for (int i = 0; i < md.dr.FieldCount; i++)
    {
    tdHead[i] = new HtmlTableCell();
    tdHead[i].InnerHtml = md.dr.GetName(i).ToString();
    trHead.Controls.Add(tdHead[i]);
    }
    table1.Controls.Add(trHead);
    int flag = 1;
    while (md.dr.Read())
    {
    HtmlTableRow tr = new HtmlTableRow();
    tr.Attributes.Add("onmouseover", "this.style.background='#99c'");
    if (flag == 1)
    {
    tr.Attributes.CssStyle.Add("background", "#ccc");
    tr.Attributes.Add("onmouseout", "this.style.background='#ccc'");
    }
    else
    tr.Attributes.Add("onmouseout", "this.style.background='fff'");
    HtmlTableCell[] td = new HtmlTableCell[md.dr.FieldCount];
    for (int i = 0; i < md.dr.FieldCount; i++)
    {
    td[i] = new HtmlTableCell();
    td[i].InnerHtml = md.dr[i].ToString();
    tr.Controls.Add(td[i]);
    }
    table1.Controls.Add(tr);
    flag = -flag;
    }
    md.Close();
    }
    }
    这里我用了自己的数据库通用类SqlData,你可以自己写下。
      

  13.   

    Repeater 不错
    要不就是在前台写个table,后台控制table
      

  14.   

    一直用GridView的路過.
    自己寫個GridView,把一些常用的方法都加進去,開發的時候多方便...效率也還可以-.-個人覺得還能接受.
      

  15.   


    reporter 是什么?是不是repeater?
      

  16.   

    现在的MVC就是这样的
    学下不错
      

  17.   

    LZ  结贴了   ASP.NET不用绑定的控件 用啥子呢?微软都要要推出它的控件
      

  18.   

    1.  DataList很少用,一方面:产生垃圾代码,影响访问量,另一方面:拓展性不是很好(我们做的前后台都是交互性的),公司一般只允许用Repeater效率高,不会生成额外的HTML代码。(当然各自都有利弊)
    下图显示了Repeater 每秒能处理的请求数,并与 DataGrid 和 DataList 进行了对比2.  只为了显示数据没必要做成控件,让数据显示在table里有多中方式在服务器上创建Table控件,或生成HTML标签..
      

  19.   

    一直没用前台控件。
    自己输出控制方便。
    后台生成字符串,前台输出。
    或者直接在前台<%%>都用。
      

  20.   

    效率对于web开发来说,比较重要。
      

  21.   

    看你的项目需求了,如果是内网的少人访问的我们都用gridview多方便啊,注重效率的一般都不会用了吧,还有有些展示特殊效果的
      

  22.   

    博客园的大仙不是写了很多文章发起复古运动倡导大家学习C/C++说什么:重剑没什么锋,大什么巧什么不工.说等学习精通了C/C++再用JAVA或者是.NET,VC++,DEPHI,VB,VF等什么的就得心应手了;可是那时咱们就饿死了.出发点是好地,可是和现实太遥远,面包与理想.