有一存储过程,结果列个数未知,
如何在C#中与datalist绑定(不是使用html)

解决方案 »

  1.   

    <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 border=0 cellspacing=4 cellPadding=0 style='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 + "' border=0></a>";
    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
    页面中有三种显示模式