代码改变世界

DataList的自定义模版列绑定及Container

2005-10-27 13:58  Bluetooth  阅读(771)  评论(0编辑  收藏  举报
 使用datalist可以灵活的定义你的数据展示,它比datagrid有着更好的灵活性。比如,我们定义了一个datalist,在page_load()事件中取出数据,绑定datalist,一切与datagrid无异。
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面
            System.Data.SqlClient.SqlConnection con=new System.Data.SqlClient.SqlConnection("data source=(local);user id=sa;database=pubs");
            System.Data.SqlClient.SqlCommand sqlcom
=new System.Data.SqlClient.SqlCommand("select * from titles",con);
            sqlcom.Connection.Open();
            System.Data.SqlClient.SqlDataReader sqlreader
=sqlcom.ExecuteReader();
            
this.DataList1.DataSource=sqlreader;
            
this.DataList1.DataBind();
            sqlcom.Connection.Close();
        }
下面,重要的是,如何编辑定义你的datalist样式,比如,要定义几列格式一样的数据展示,我们可以定义datalist的RepeatColumns属性。技巧同编写所有的web窗体一样,请在itemtemplate里面嵌套一个table.比如下面这样:
<asp:datalist id="DataList1" runat="server" RepeatColumns="3">
                    
<ItemTemplate>
                        
<TABLE style="FONT: 10.5pt 宋体" cellPadding="10">
                            
<TR>
                                
<TD width="1" bgColor="#bd8672">
                                
<TD vAlign="top"><IMG src="aspplus/cale.gif" align="top">
                                
</TD>
                                
<TD vAlign="top"><B>书名:</B><%# DataBinder.Eval(Container.DataItem,"Title")%><BR>
                                    
<B>价格:</B><%# DataBinder.Eval(Container.DataItem,"Price")%><BR>
                                
</TD>
                            
</TR>
                        
</TABLE>
                    
</ItemTemplate>
                
</asp:datalist></FONT></form>
   虽然我们紧紧写了一个模版列的代码,数据查询后所对应的所有的行,都将一一显示出来。
   这里注意的是:<%%>与<%#%>的区别,看上面我们可以发现,前者是全局引用,而后者,仅仅在databind()发生后才编译代码,这是两者的区别。
   同样注意的是Container.DataItem,它据说是指的局部变量的引用,datarowview ?我想我没有弄清楚它到底是怎么回事的引用。
  但是结果,是我们所想要的。很好。