大家都知道一般的数据绑定是用<%#Eval("绑定字段")%>,那么如果要在里面嵌入for循环呢?现在要实现的功能是从数据库里取出int类型的星级(Star)字段,然后用for循环“画”出几颗星,三星级就用for画3个,五星级就画5个。现在我aspx里是这样写的:<asp:Literal ID="litStar" runat="server"></asp:Literal>
<%
for (int i = 0; i < (int)Eval("Star"); i++)
{
litStar.Text += "<img src='img/star.gif' alt='' />";
}
%>但它会报措说:
Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。如果写成:<asp:Literal ID="litStar" runat="server"></asp:Literal>
<%
for (int i = 0; i < (int)(DataBinder.Eval(DataList1, "Star")); i++)
{
litStar.Text += "<img src='img/star.gif' alt='' />";
}
%>会报措说:
DataBinding:“System.Web.UI.WebControls.DataList”不包含名为“Star”的属性。
其中Eval的第一个参数的容器应该是什么?第二个参数是指向绑定字段吗?如果<%写成<%#,程序就不认识for关键字了,如果把#号写在Eval前面,for语句也是错误的

解决方案 »

  1.   

    LZ可以在.cs文件中写个方法啊,方法必须是public或这protected 的
    在.aspx文件中调用这个方法啊
      

  2.   

    string sql = "select hotelName,address,starLevel from g_hotel where hotelID=@hotelID";
                SqlParameter[] p ={ 
                new SqlParameter("@hotelID",Convert.ToInt32(Request.QueryString["hotelID"].ToString()))
                                  };
                SqlDataReader dr = data.ExecReader(sql, p);
                if (dr.HasRows)
                {
                    dr.Read();
                    labHotelName.Text = dr["hotelName"].ToString();
                    labAddress.Text = dr["address"].ToString();
                    string sStar = dr["starLevel"].ToString();
                    if (sStar.IndexOf("五") >= 0 || sStar.IndexOf("5") >= 0) ShowStars(5);
                    else if (sStar.IndexOf("四") >= 0 ||sStar.IndexOf("4") >=0) ShowStars(4);
                    else if (sStar.IndexOf("三") >= 0 || sStar.IndexOf("3") >= 0) ShowStars(3);
                    else if (sStar.IndexOf("二") >= 0 || sStar.IndexOf("2") >= 0) ShowStars(2);
                    else if (sStar.IndexOf("一") >= 0 || sStar.IndexOf("1") >= 0) ShowStars(1);
                    else ShowStars(0);
                    dr.Close();
                }
        void ShowStars(int count)
        {
            xing1.Visible = false;
            xing2.Visible = false;
            xing3.Visible = false;
            xing4.Visible = false;
            xing5.Visible = false;
            if (count >= 1) xing1.Visible = true;
            if (count >= 2) xing2.Visible = true;
            if (count >= 3) xing3.Visible = true;
            if (count >= 4) xing4.Visible = true;
            if (count >= 5) xing5.Visible = true;
        }