Repeater绑定OjbectDataSource,打算如果返回的数据为空,则要显示“无数据”,但Repeater没有提供EmptyDataText属性。我试着在它的ItemDataBound事件中判断 是否Repeater1.Items.Count==0,但发现无效。实在搞不定了!多谢各位!

解决方案 »

  1.   

    添加一个标签
    如果没有数据:
    Label1.Visible=true;
    Label1.Text="没有数据"
    Repeater1.Visible=false;
      

  2.   

    手动绑定试试,先看看objectdatasource返回的datatable是否为空,
      

  3.   

    <ItemTemplate>
    <%#DataBinder.Eval(Container.DataItem,"myValue","{0}")==""?无数据:DataBinder.Eval(Container.DataItem,"myValue","{0}")%>'
    </ItemTemplate>
      

  4.   

    把q_po_o(两个人) 的代码考进去了,无数据三个字加了一下引号(不加引号编译会出错),还是没有达到我的效果。在数据源为空时,就是一片空白,什么也不显示。似乎DataBinder.Eval(Container.DataItem,"myValue","{0})的值日永远不为"",但为什么还是一片空白呢?难道是DBNull?但是已经经过了业务层的封装,DBNull不可能传得上来了吧?
    这个ObjectDataSourc其实是一个对数据库的封装,存储过程中不好实现的业务逻辑判断移到了程序中了。
    最好的方式就是我提到的关键:在哪一个事件中如何判断数据源返回的数据为空?至于加一个Label来显示和隐藏,这很容易想到。
    我基本上找遍了事件和属性,就是找不到。
    各位高手帮帮忙!
      

  5.   

    我分别将这一句换成以下几句:
    <%#DataBinder.Eval(Container.DataItem, "TimeForDay") == "" ? "无事件" : DataBinder.Eval(Container.DataItem, "TimeForDay")%>
    <%# Convert.IsDBNull(Container.DataItem)? "无事件" : DataBinder.Eval(Container.DataItem, "TimeForDay")%><%# (Container.DataItem==null)? "无事件" : DataBinder.Eval(Container.DataItem, "TimeForDay")%>结果都是一样,没用
      

  6.   

    TimeForDay 是什么类型
    以下是成功的测试代码<ASP:DATAGRID id="DataGrid1" runat="server" autogeneratecolumns="False">
    <COLUMNS>
    <ASP:TEMPLATECOLUMN>
    <ITEMTEMPLATE>
    <%#DataBinder.Eval(Container.DataItem,"StringValue","{0}")==""?"无数据":DataBinder.Eval(Container.DataItem,"StringValue","{0}")%>
    </ITEMTEMPLATE>
    </ASP:TEMPLATECOLUMN>
    <ASP:TEMPLATECOLUMN>
    <ITEMTEMPLATE>
    <%#DataBinder.Eval(Container.DataItem,"CurrencyValue","{0}")%>
    </ITEMTEMPLATE>
    </ASP:TEMPLATECOLUMN>
    </COLUMNS>
    </ASP:DATAGRID>private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {

    DataGrid1.DataSource=CreateDataSource();
    DataGrid1.DataBind();
    }
    }
    ICollection CreateDataSource() 
    {
    DataTable dt = new DataTable();
    DataRow dr; dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
    dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
    dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double))); for (int i = 0; i < 9; i++) 
    {
    dr = dt.NewRow(); dr[0] = i;
    if(i%2 == 0)
    {
    dr[1] = "";
    }
    else
    {
    dr[1] = "Item " + i.ToString(); }
    dr[2] = 1.23 * (i + 1); dt.Rows.Add(dr);
    } DataView dv = new DataView(dt);
    return dv;
    }
      

  7.   

    这是那个业务层代码:一个日历的网站(哪天有事件就显示出来)
    public class Event
    {
    public Event()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }    private int  _eventId;
        private string _title;
        private int _typeId;
        private DateTime _fromTiime;
        private DateTime _toTime;
        private bool _isAllDayEvent;
        private string _address;    #region Properties
        public int EventId
        {
            get { return _eventId; }
            set { _eventId = value; }
        }    public string Title
        {
            get { return _title; }
            set { _title = value; }
        }    public int TypeId
        {
            get { return _typeId; }
            set { _typeId = value; }
        }    public DateTime FromTime
        {
            get { return _fromTiime; }
            set { _fromTiime = value; }
        }
        public DateTime ToTime
        {
            get { return _toTime; }
            set { _toTime = value; }
        }
        public bool IsAllDayEvent
        {
            get { return _isAllDayEvent; }
            set { _isAllDayEvent = value; }
        }
        public string TimeForDay
        {
            get 
            {
                if (_isAllDayEvent)
                    return " 全天事件";
                else
                    return _fromTiime.ToString("t") + " - " + _toTime.ToString("t");
            }
        }    public string TimeForSearch
        {
            get
            {
                if (_isAllDayEvent)
                    return "全天事件";
                else
                    return FromTime.ToString("t") + " - " + ToTime.ToString("t");
            }
        }
        public string Address
        {
            get { return _address; }
            set { _address = value; }
        }
        #endregion    public static List<Event> GetDayEvents(DateTime date, string typeIds, bool onlyForViewer)//typeIds是类似于这样的字符串:1,2,3,4,5 或者 all 。Viewer:普通查看者,Admin:管理员
        {        SqlHelper objSqlHelper = new SqlHelper();
            SqlParameter[] objParams = new SqlParameter[4];
            objParams[0] = new SqlParameter("@FromDate", date);
            objParams[1] = new SqlParameter("@ToDate", date.AddDays(1));
            objParams[2] = new SqlParameter("@TypeIds", typeIds);
            objParams[3] = new SqlParameter("@OnlyForViewer", onlyForViewer);
            SqlDataReader reader = objSqlHelper.ExecuteReader("cal_GetEvents", objParams);        List<Event> objList = new List<Event>();
            while (reader.Read())
            {
                Event e = new Event();
                e.EventId = reader.GetInt32(reader.GetOrdinal("EventId"));
                e.Title = reader["Title"].ToString();
                e.TypeId = reader.GetInt32(reader.GetOrdinal("TypeId"));
                e.FromTime = reader.GetDateTime(reader.GetOrdinal("FromTime"));
                e.ToTime = reader.GetDateTime(reader.GetOrdinal("ToTime"));
                e.IsAllDayEvent = reader.GetBoolean(reader.GetOrdinal("IsAllDayEvent"));
                e.Address = reader["Address"].ToString();            objList.Add(e);
            }
            reader.Close();
            return objList;
        }