天天看點

如何實作datalist動态資料綁定

<asp:datalist   id="list"   runat="server"   CellPadding="0"   Width="100%"></asp:datalist>  

  ------------------------------------------------------------------------  

  page_load  

  //   套用顯示方式模闆  

  SelectTemplate(int.Parse(Session["mode"].ToString()));  

  --------------------------------------------------------------------------  

  //   選擇一合适的模闆  

  public   void   SelectTemplate(int   mode)  

  {  

  switch(mode)  

  {  

  case   0: //   簡單圖文  

  PageSize   =   12;  

  list.RepeatColumns   =   3;  

  list.RepeatDirection   =   RepeatDirection.Horizontal;  

  list.RepeatLayout   =   RepeatLayout.Table;  

  //list.BorderWidth   =   Unit.Pixel(1);  

  //list.BorderStyle   =   BorderStyle.Solid;  

  list.ItemStyle.Width   =   Unit.Pixel(195);  

  list.ItemStyle.VerticalAlign   =   VerticalAlign.Top;  

  list.ItemTemplate   =   new   SimpleTemplate(ListItemType.Item);  

  break;  

  case   1: //   詳細圖文  

  PageSize   =   4;  

  list.RepeatColumns   =   0;  

  list.RepeatDirection   =   RepeatDirection.Vertical;  

  list.RepeatLayout   =   RepeatLayout.Table;  

  list.GridLines   =   GridLines.None;  

  list.ItemTemplate   =   new   DetailTemplate(ListItemType.Item);  

  break;  

  case   2: //   文字連結  

  PageSize   =   20;  

  list.RepeatColumns   =   0;  

  list.RepeatDirection   =   RepeatDirection.Vertical;  

  list.RepeatLayout   =   RepeatLayout.Table;  

  list.GridLines   =   GridLines.None;  

  list.ItemTemplate   =   new   TextLinkTemplate(ListItemType.Item);  

  break;  

  }  

  }  

  }  

  ------------------------------------------------------------------------  

  //   簡約方式顯示模闆  

  public   class   SimpleTemplate   :   ITemplate  

  {  

  ListItemType   templateType;  

  public   SimpleTemplate(ListItemType   type)  

  {  

  templateType   =   type;  

  }  

  public   void   InstantiateIn(System.Web.UI.Control   container)  

  {  

  Literal   lc   =   new   Literal();  

  switch(templateType)  

  {  

  case   ListItemType.Header:  

  break;  

  case   ListItemType.Item:  

  lc.Text   =   "<TABLE   font-family:宋體;font-size:9pt'>";  

  lc.DataBinding   +=   new   EventHandler(TemplateControl_DataBinding);  

  break;  

  case   ListItemType.AlternatingItem:  

  break;  

  case   ListItemType.Footer:  

  break;  

  }  

  container.Controls.Add(lc);  

  }  

  private   void   TemplateControl_DataBinding(object   sender,System.EventArgs   e)  

  {  

  Literal   lc;  

  lc   =   (Literal)   sender;  

  DataListItem   Container   =   (DataListItem)   lc.NamingContainer;  

  String   pictureID   =   DataBinder.Eval(Container.DataItem,   "PictureID").ToString();  

  PhotoLib.PicturesDB   picturesDB   =   new   PhotoLib.PicturesDB();  

  PhotoLib.Pictures   pictures   =   new   PhotoLib.Pictures();  

  DataSet   ds   =   new   DataSet();  

  pictures   =   picturesDB.GetPictures(pictureID);  

  ds   =   picturesDB.GetPictureDetails(pictureID);  

  int   count   =   ds.Tables["PictureDetails"].Rows.Count; //   獲得資料集的行數  

  //   獲得第一行的相關資料(要注意空值的檢查)  

  String   pictureImage   =   ds.Tables["PictureDetails"].Rows[0].ItemArray[5].ToString(); //   圖檔檔案名  

  String   author   =   ds.Tables["PictureDetails"].Rows[0].ItemArray[6].ToString(); //   作者  

  String   user   =   pictures.UserID;  

  String   auditDate   =   pictures.AuditDate.ToLongDateString();  

  //String   pictureDate   =   "";  

  //if(ds.Tables["PictureDetails"].Rows[0].ItemArray[1]   !=   DBNull.Value)  

  // pictureDate   =   ((DateTime)ds.Tables["PictureDetails"].Rows[0].ItemArray[1]).ToLongDateString(); //   拍攝日期  

  //   獲得圖檔檔案的路徑(此處肯定是小圖)  

  String   yearstr   =   pictureImage.Substring(0,4);  

  String   datestr   =   pictureImage.Substring(0,8);  

  String   typestr   =   pictureImage.Substring(11,1);  

  String   path   =   "PicLib/SmallPic/"   +   yearstr   +"p/PhotoC/"   +   datestr   +   "/"; //   分類圖檔  

  if(typestr   ==   "b")  

  path   =   "PicLib/SmallPic/"   +   yearstr   +"p/PhotoP/"   +   datestr   +   "/"; //   專業圖檔  

  string   cap   =   pictures.Caption;  

  if(cap.Length>25)  

  cap   =   cap.Substring(0,22)   +   "...";  

  //   輸出樣式  

  lc.Text   +=   "<TR><TD   height='130'width=195   valign=middle   align=center>"; //   百分比方式無效??  

  lc.Text   +=   "<a   href='PictureDetails.aspx?pid="+   pictureID   +   "'   target=_blank><img   src='"   +   path   +   pictureImage   +   "'   ;  

  lc.Text   +=   "</TD></TR><TR><TD   valign=top   height=32>";  

  if(count>1)  

  lc.Text   +=   "◆   "   +   "<a   href='PictureDetails.aspx?pid="+   pictureID   +   "'   target=_blank>"   +   cap   +   "("   +   count.ToString()   +   "張)</a>";  

  else  

  lc.Text   +=   "◆   "   +   "<a   href='PictureDetails.aspx?pid="+   pictureID   +   "'   target=_blank>"   +   cap   +   "</a>";  

  lc.Text   +=   "</TD></TR><TR><TD   height=20>";  

  //lc.Text   +=   "&nbsp;&nbsp;作者:"   +   author   +   "   上傳日期:"   +   auditDate;  

  lc.Text   +=   "&nbsp;&nbsp;上傳:"   +   user;  

  lc.Text   +=   "</TD></TR><TR><TD   align='middle'   background='images/line03.gif'   height='1'></TD></TR></TABLE>";  

  }  

  }  

  -------------------------------------------------------------------------  

  示範例子請見  

  http://www.gdcic.net/photo/PicturesList.aspx?Type=1&scope=1  

  頁面中有三種顯示模式  

繼續閱讀