DataList控件 小总

来源:互联网 发布:软件需求工程 编辑:程序博客网 时间:2024/04/29 03:20

DataList控件

  

  工具箱中包括一个DataList控件。该控件可用于创建模板化的列表数据。可以在一个模板化列表中,通过设置模板来控制呈现该列表的HTML。模板描述如何显示列表中的某一项的HTML。

  

  提示:DataList控件提供了一些简单的模板。如果需要精确控制布局,可以考虑使用Repeater控件,该控件将在下文中讲解。

  

  在表中列出了DataList控件提供的7个不同的模板变量,它们可用来定义外观。在这些模板中,除了ItemTemplate模板外,其他都是可选的。

  

  表 DataList控件模板

  

  模板名 说 明

  

  AlternatingItemTemplate 为每一个间隔项提供内容和布局。如果没有定义,在DataList中将为每一项使用ItemTemplate

  

  EditItemTemplate 为当前正在编辑的项提供内容和布局。如果没有定义,在DataList中将为正在编辑的项使用ItemTemplate

  

  FooterTemplate 为页脚提供内容和布局。如果没有定义,DataList将不会有页脚

  

  HeaderTemplate 为标题提供内容和布局。如果没有定义,DataList将不会有标题行

  

  ItemTemplate 必须定义。每一项的内容和布局的默认定义

  

  SelectedItemTemplate 为当前选中的行提供内容和布局。如果没有定义,ItemTemplate将被使用

  

  SeparatorTemplate 为项与项之间的分隔符提供内容和布局。如果没有定义,将不会使用分隔符

  

  为了学习DataList控件,首先,创建一个新应用程序(WebNorthWind-DataControls)或者添加一个页面到已有的应用程序DataControls中。把DataList控件拖到表单中。在“Design”视图中,打开智能标签可以选择数据源。作为练习,选择“New Data Source”项,接着选择“SQL Database”,将新数据源命名为DataListCustomerDataSources。使用已有的指向NorthWind的连接,然后设置选中Customers表中的所有字段。完成后,DataList将被表示字段名称和绑定到数据控件的Label填充。

  

  如果单击“Source”,将看到DataList控件已经定义了许多属性,以便识别它的数据源:

  

    

   ID="DataList1"

  

   DataKeyField="CustomerID"

  

   DataSourceID="DataListCustomerDataSources">

 

  图:DataList绑定数据控件

  

  在DataList 的开闭标签之间包括一个标签。该标签定义了每一项应该如何显示。在默认的< ItemTemplate>标签中,每个列都用Literal控件表示,而绑定的值则用Label控件表示。这些Label控件的Text属性使用 Eval方法传入数据中的列名创建,如下所示:

  Text=''

  提示:Eval返回的是传入的列名所对应的列数据的值。

  

  有多种可以改善该控件外观的方法。首先,回到“Design”视图,单击“Auto Format…”,选择一个方案(如Classic),这样做将为DataList增加许多样式:

  

    

   ID="DataList1"

  

   DataKeyField="CustomerID"

  

   DataSourceID="DataListCustomerDataSources"

  

   CellPadding="4"

  

   ForeColor="#333333">

   ...

   ...

   另外,可以回到智能标签,选择“Edit Templates”,这将使智能标签变为“Template Editing Mode”(模板编辑模式,直到单击“End Template Editing”,该模式才结束),并提供一个下拉菜单来选择需要编辑哪个模板。

  

  可以通过展开或者移动模板中的元素来随意修改模板、添加新的控件等。

  

  作为替代,可以直接在内容文件中添加或者修改模板。选择何种方法由个人决定。每个模板都支持它自己的样式对象,这些对象可以在设计时设置并在运行时修改。

  

  默认情况下,每个项是一个接着一个显示的,位于一个垂直的列中。可以通过把DataList的“Repeat Direction”属性由Vertical设置为Horizontal来修改它,也可以通过设置RepeatColumns属性来设置列的数量。

  

  在DataList控件中,包括一些控制外观和行为的常用属性,它们并不是从Control或WebControl类继承的,如表所示。

  

  表 未从WebControl类继承的DataList控件属性

  

  属 性 类 型 读 写 值 说 明

  

  Caption String × × 作为HTML caption元素显示的文本

  

  CaptionAlign TableCaptionAlign × × Bottom、Left、NotSet、Right、Top

   指定caption元素的放置位置

  

  CellPadding Integer × × 单元格内容和边框之间的像素数

  

  CellSpacing Integer × × 单元格之间的像素数

  

  DataKeyField String × × 指定数据源中的键字段

  

  DataKeys DataKeyCollection × × 每条记录的键值的集合

  

  

  续表 未从WebControl类继承的DataList控件属性

  

  属 性 类 型 读 写 值 说 明

  

  DataMember String × × 设定多成员数据源中的数据成员

  

  DataSource Object × × 为控件设置数据源

  

  EditItemIndex Integer × × 编辑的行,从零开始的行索引。如果没有项被编辑或者清除对某项的选择,设置值为-1

  

  EditItemStyle TableItemStyle × 派生自WebControl.

  Style类,目前选中的编辑行的样式

  

  FooterStyle TableItemStyle × 派生自WebControls.

  

  Style类,页脚部分的样式属性

  

  GridLines GridLines × × Both、Horiz- ontal、None、Vertical

   设置显示哪些网格线。默认值为None

  

  HeaderStyle

   TableItemStyle

   ×

   派生自WebControls. Style类,标题部分的样式属性

  

  Items   DataListItemCollection   × 控件中的所有项的集合

  

  ItemStyle   TableItemStyle   ×   派生自WebControls.Style 类,控件中每个项的默认样式属性

  

  RepeatColumns   Integer   ×   ×   设置显示的列数

  

  RepeatDirection RepeatDirection × ×   Horizontal、Vertical 如果为Horizontal,

  

  项是从左到右,然后从上到下显示。如果是Vertical,项是从上到下,然后从左到右显示的。默认值为Vertical

  

  RepeatLayout   RepeatLayout   ×   ×   Flow、Table

   如果为Flow,项显示时不会有表结构,否则会有一个表结构。默认为Table

  

   未从WebControl类继承的DataList控件属性

  

  属 性 类 型 读 写 值 说 明

  

  SelectedIndex   Integer   ×   ×   当前选中的项的索引,从0开始。如果没有选中任何项,或者清除对某项的选择,将值设置为-1

  

  SelectedItem   DataListItem   × 返回当前选中的项

  

  SelectedItemStyle TableItemStyle × 派生自WebCon- trols.Style类,控件中选中项的默认样式属性

  

  SelectedValue   Object   ×   返回当前的选中项

  

  SeparatorStyle   TableItemStyle × 派生自WebCon- trols.Style类,项与项之间的分隔符的默认样式属性

  

  ShowFooter   Boolean   ×   ×   true、false是否显示页脚,默认值为true。仅当FooterTemplate不为null时有效

  

  ShowHeader   Boolean   ×   ×   true、false 是否显示标题行,默认值为true。仅当HeaderTemplate属性不为null时有效

  

  

  另外,DataList控件包括多个事件。表列出了其中最重要的几个事件。

  

  表 DataList控件的事件

  

  事 件 事件参数 事件参数属性 说 明

  

  DataBinding EventArgs None 当控件绑定到数据源时触发(继承自Control)

  

  DeleteCommand DataListcommand-EventArgs CommandArgument、CommandName

   当单击“Delete”按钮时触发

  

  EditCommand DataListcommand-EventArgs CommandArgument、CommandName

   当单击“Edit”按钮时触发

  

  Init EventArgs None 当控件初始化时触发(继承自Control)

  

  

  续表 DataList控件的事件

  

  事 件 事件参数 事件参数属性 说 明

  

  ItemCommand DetailsViewCom-mandEventArgs- FormViewComm-andEventArgs

   CommandArgument、CommandName、CommandSource

   当单击控件中的一个按钮时触发

  

  ItemCreated EventArgs  none  在控件中的所有行创建完毕后触发

  

  ItemDataBound   DataListItemEvent-Args   Item 当绑定数据时触发

  

  PreRender   EventArgs   None  在控件呈现在页面上之前触发(继承自Control)

  

  UpdateCommand   DataListcommand-EventArgs   CommandArgument、CommandName   当单击“Update”按钮时触发

   

  设计模版:

  页眉

  页脚

  

  数据记录

  

   交替显示项

  

  选中时的显示方式

  

   编辑时的显示方式

  

   数据记录分隔符

  

  编辑模版,里面可以嵌入控件,绑定数据。

  设置外观

  RepeatLayout 属性设置显示方式

  RepeatDirection 显示方向

  RepeatColumns 列数

  事件

  

  加入模版列的按钮会将其click事件反升到 ItemCommand 事件,也可设置CommandName 来响应不同的事件,如设为:edit,即引发EditCommand()等。

  注:若设为:select 则会引发SelectedIndexChanged 和ItemCommand事件

  SelectedItemTemplate模版; 添加详细信息的控件,当用户选择了该项,选择模版则显示。

  private void DataList1_ItemCommand(……)

  { switch(e.CommandName)

   {

   case "select":

   this.DataList1.SelectedIndex=e.Item.ItemIndex;

   string s=(string)this.DataList1.DataKeys[e.Item.ItemIndex];

   //在此获得该条记录的详细数据,在SelectedItemTemplate模版里显示。

   break;

   case "unselect":

   this.DataList1.SelectedIndex=-1;

   break;

   }

   this.DataList1.DataBind();//一定要

  }

  EditItemTemplate模版

   编辑:

   this.DataList1.EditItemIndex=e.Item.ItemIndex;

   this.DataList1.DataBind();

   更新:

  得到主键

  string s=(string)this.DataList1.DataKeys[e.Item.ItemIndex];

  得到模版里的控件

  TextBox box=(TextBox)e.Item.FindControl("TextBox1");

  更新记录

  this.DataList1.DataBind();

   取消:

  this.DataList1.EditItemIndex=-1;

  this.DataList1.DataBind();

  删除项

  一次勾选多条记录,一次删除

   foreach(DataListItem i in this.DataList1.Items)

   {

  

   bool IsChecked=((CheckBox)i.FindControl("deletectr")).Checked;

  

   if(IsChecked)

   {

   string s=(string)this.DataList1.DataKeys[e.Item.ItemIndex];

  

   删除操作 }

  

   }

  运行中自定义DataList控件

  //当创建DataList控件中的任意项时

  private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)

  {

  switch(e.Item.ItemType)

  { case ListItemType.Header:

   e.Item.ForeColor=Color.Red;

   e.Item.BackColor=Color.Black;

   break;

   case ListItemType.Item:

   e.Item.BackColor=Color.Black;

   break;

   }

  }

  //当模版中的项被数据绑定时发生,数据被显示到客户端前加以访问的最后机会

  private void DataList1_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)

  {

  if((e.Item.ItemType==ListItemType.Header)||(e.Item.ItemType==ListItemType.Item))

   {

   System.Data.Common.DbDataRecord drv=

   (System.Data.Common.DbDataRecord)e.Item.DataItem;

   if((decimal)drv["库存量"]<1000)

   {

   e.Item.ForeColor=Color.Red;

   }

   }

  

  }

  

  另种方式

   if((e.Item.ItemType==ListItemType.Header)||(e.Item.ItemType==ListItemType.Item))

  

   {

   DataRowView drv=(DataRowView)e.Item.DataItem;

   string department=(string)drv["部门"];

   switch(department)

   { case "销售部":

  

   e.Item.BackColor=Color.Black;

  

   break;

   case "技术部":

   e.Item.BackColor=Color.Red;

   break; }

   }

原创粉丝点击