如何使用ilist绑定repeater?
我第一次使用ilist,
直接赋值,前台提示未找到title数据,我知道是因为没有创建相关列,但是如果要在其他地方创建好相应的dataview或者dataset在赋值给ilist接口的话,是不是还不如直接绑定dataset?
  if (Dr.Read())
            {
                
                list.Add(new ListItem(Dr["title"].ToString(), Dr["title"].ToString()));
                list.Add(new ListItem(Dr["Introduction"].ToString(),Dr["Introduction"].ToString()));
            }请教下大家,我该怎么处理?还有一般大家用ilist绑定数据集怎么做的?

解决方案 »

  1.   

    用list绑定是个好习惯,dataset太臃肿,不过为了快速开发,还是会用到,是破坏面向对象的。list绑定方式其实和dataset也差不多,dataset是直接绑定数据库的表的列名,list是绑对象的属性名
      

  2.   

    我想是因为你的List里装的是ListItem的原因吧,因为ListItem本身是一个特殊对象,list里为什么不放一个Model类呢?
      

  3.   

    ListItem更适合在ListBox或DropDownList类型的控件里使用
      

  4.   

    if (Dr.Read()) 
                { 
                    
                    list.Add(Dr["title"].ToString()); 
                    list.Add(Dr["Introduction"].ToString());
                } 这样应该可以
      

  5.   


    这样同样也是会报repeater无title字段的,
    我是这样定义的
     private static IList<String> GetDataSetParam()
      

  6.   

    其实我和你一样,我一直是想不明白,如果这个泛指接口非要提供一个实体接口给他 然后在赋值给数据集,是不是有点多余呢?还不如直接把实体接口返回的值赋值给ilist呢
      

  7.   

    你是08还是05呢?如果是08可以在list中放入一个有若干属性的匿名对象,如果是05则应该给一个对象,不然你在前台写Title,程序怎么知道哪个是Title?
      

  8.   

    我想如果是GV应该没问题,因为Repeat需要手动设置绑定列
      

  9.   

    我用的是08,再问一下 什么叫 若干属性的匿名对象? 能不能稍微个一个例子?
    是不是在private static IList <String> GetDataSetParam()写个什么?
      

  10.   

    if (Dr.Read()) 
                { 
                    
                    list.Add( new { Title=Dr["title"].ToString() } ); 
                    list.Add( new { Title=Dr["Introduction"].ToString() } );
                } 
      

  11.   

    if (Dr.Read()) 应该是while(dr.Read())吧
      

  12.   

    出错的。。
    private static IList<string> GetDataSetParam()
            {
                string ConnectionString = ConfigurationManager.ConnectionStrings["Post_Detail"].ConnectionString;
                SqlConnection Connection = new SqlConnection(ConnectionString);
                SqlCommand cmd=new SqlCommand("Post_Detail",Connection);
                cmd.CommandType=CommandType.StoredProcedure;            Connection.Open();
                SqlDataReader Dr = cmd.ExecuteReader();
                IList<string> list = new List<string>();
                if (Dr.Read())
                {
                    list.Add(new { title = Dr["title"].ToString() });
                    list.Add(new { Introduction = Dr["Introduction"].ToString() });             }
                //adapter.Fill(ilst);
                Connection.Close();
                return list;
            }
      

  13.   

    list.Add(new { title = Dr["title"].ToString() }); 
                    list.Add(new { Introduction = Dr["Introduction"].ToString() }); 
    这里报错Error 1 The best overloaded method match for 'System.Collections.Generic.ICollection<string>.Add(string)' has some invalid arguments
    Error 2 Argument '1': cannot convert from 'AnonymousType#1' to 'string'
      

  14.   

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class TT : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                IList list = new ArrayList();
                list.Add(new ListItem("a", "001"));
                list.Add(new ListItem("b", "002"));
                list.Add(new ListItem("c", "003"));
                MyRepeater.DataSource = list;
                MyRepeater.DataBind();
            }
        }
    }
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="TT.aspx.cs" Inherits="TT" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <table><tr>
       
        <asp:Repeater ID="MyRepeater" runat ="server">
            <ItemTemplate>
                </tr><td><%#((ListItem)Container.DataItem).Text %></td> 
                <td><%#((ListItem)Container.DataItem).Value  %></td> <tr>
            </ItemTemplate>    
        </asp:Repeater>
       
        </tr></table>
       
        </div>
        </form>
    </body>
    </html>
      

  15.   

     IList <string>限制了不能装匿名对象,我再想想
      

  16.   

         { 
                    
                    list.Add( Dr["title"].ToString() ); 
                    list.Add( Dr["Introduction"].ToString() ); 
                } 
      

  17.   

    这样前台用常规的绑定方式 绑定 <h3><%# DataBinder.Eval(Container.DataItem, "title", "{0}")%></h3>,绑定不了,找不到title的
      

  18.   

    老兄同命人啊?我也是郁闷死了,
    昨天回家测试了一下居然行了。
    回到公司又是同一个问题。
    我尝试直接用SQL语句通过DataTable绑定是对的。我不知道是不是DataGrid的绑定数据源不支持这种泛型啊?
      

  19.   

    个人比较倾向于 <h3><%# DataBinder.Eval(Container.DataItem, "title", "{0}")%></h3>
    这一类型的模板绑定,所以还想继续求教
      

  20.   

    用datatable本来就是行的,我现在不想用这个现在问题貌似集中到如何对前台的 title字段进行赋值,也就是创建title列、、、貌似又像table了。。
      

  21.   

    我测试通过了
    private static IList <string> GetDataSetParam() 
            { 
                string ConnectionString = ConfigurationManager.ConnectionStrings["Post_Detail"].ConnectionString; 
                SqlConnection Connection = new SqlConnection(ConnectionString); 
                SqlCommand cmd=new SqlCommand("Post_Detail",Connection); 
                cmd.CommandType=CommandType.StoredProcedure;             Connection.Open(); 
                SqlDataReader Dr = cmd.ExecuteReader(); 
                IList  list = new ArrayList(); 
               while (Dr.Read()) 
                { 
                    list.Add(new { title = Dr["title"].ToString(),Introduction = Dr["Introduction"].ToString() }); 
                } 
                //adapter.Fill(ilst); 
                Connection.Close(); 
                return list; 
            }
    前台绑定:
    <%# Eval("title") %>
    <%# Eval("Introduction") %>
      

  22.   

    别忘把返回类型改为 IList
      

  23.   

    一定要用IList  list = new ArrayList();?嘛~~~貌似list<string>不行哦
      

  24.   

    list.Add(new { title = Dr["title"].ToString(),Introduction = Dr["Introduction"].ToString() }); 
                } 
    因为这句话决定了,列表里装的是对象,而非一个字符串
      

  25.   

        #region 返回实体类年级表
            public static IList<GradeEntity> GetClassName()
            {
                IList<GradeEntity> className = new List<GradeEntity>();
                using (IDataReader dr = provider.GetReaderBySp("GetClass"))
                {
                    while (dr.Read())
                    {
                        GradeEntity grade = new GradeEntity();
                        grade.GradeId =int.Parse( dr["Class_Id"].ToString());
                        grade.Gradename = dr["Class_Name"].ToString();
                        grade.Gradeorder = dr["Class_Order"].ToString();
                        className.Add(grade);
                    }
                }
                return className;
            }
            #endregion
     #region 返回实体类年级表
            public static IList<GradeEntity> GetClassName()
            {
                IList<GradeEntity> className = new List<GradeEntity>();
                using (IDataReader dr = provider.GetReaderBySp("GetClass"))
                {
                    while (dr.Read())
                    {
                        GradeEntity grade = new GradeEntity();
                        grade.GradeId =int.Parse( dr["Class_Id"].ToString());
                        grade.Gradename = dr["Class_Name"].ToString();
                        grade.Gradeorder = dr["Class_Order"].ToString();
                        className.Add(grade);
                    }
                }
                return className;
            }
            #endregion
      

  26.   


    测试通过了,太感谢了我还想再问一句,如果  private static IList <string> GetDataSetParam()和private static IList GetDataSetParam()2个返回的结果 是不是 IList <string>返回的必须是值是string的? IList返回的是匿名的,也就什么的可以接受的?
      

  27.   

    Ilist<GradeEntity> list=GetClassName();
    Repeater.DataSource=list;
    Repeater.DataBind();
      

  28.   

    如果你用List<string>就只能装String,那就跟前台的title没关系了,如果前台非要用Title则要么用楼上的实体类,要么用匿名对象,如果非要用List<string>绑定到GridView是没有问题的,因为前台不用手写绑定字段列,Gv会自动处理
      

  29.   

    15楼都把解决方案清清楚楚的写出来了
    用IList绑定到Repeater或GridView之类的,
    要在前台转换成相应的类型进行处理,而不能简单的用Eval来处理
    因为ListItem确实没有Title这个属性但是如果绑定的是ListItem,你可以用Eval("Value")这种写法