日期:2014-05-19  浏览次数:20423 次

DataList根据值显示数据的问题
DataList显示表A的数据,其中有字段A1值为true或false,我想程序自动判断如果为true   ,则显示DataList的B1,我程序如下:

aspx:
<asp:DataList   ID= "DataList1 "   runat= "server "   DataKeyField= "Id "   Width= "620px "   OnItemDataBound= "DataList1_ItemDataBound ">

cs:
        protected   void   DataList1_ItemDataBound(object   sender,   DataListItemEventArgs   e)
        {
                if   (e.Item.ItemType   ==   ListItemType.Item   ||   e.Item.ItemType   ==   ListItemType.AlternatingItem)
                {
                        Label   TuanGouORLiShouLabel   =   (Label)e.Item.FindControl( "A1 ");
                        string   TGOrLS   =   A1.Text;
                        Response.Write(TGOrLS);//全部A1的字段全显示出来了,没有办法进行一行进行一次判断后显示数据。
                        ////if   (TGOrLS   ==   "true ")
                        ////{

                        ////         HyperLink   HyperLink5   =   (HyperLink)e.Item.FindControl( "HyperLink5 ");
                        ////         HyperLink5.Visible   =   false;

                        ////}

                }

        }

但我在调试时发现TGOrLS把全部A1的字段全显示出来了,全部A1的字段全显示出来了,而我想达到的却是一行数据进行判断一次,然后显示相关控件。求解。。。

------解决方案--------------------
private string GetValue(string str1,string str2)
{
if(str== "false ")
return str1;
else
return str2;
}

:)
------解决方案--------------------
有多少条数据,itemdatabound处理函数就会执行多少次,而不是只执行一次
而且应该从数据源的每一行来取值进行比较

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string TGOrLS = ((DataRowView)e.Item.DataItem).Row[ "A1 "].ToString();
if (TGOrLS == "true ")
{

HyperLink HyperLink5 = (HyperLink)e.Item.FindControl( "HyperLink5 ");
HyperLink5.Visible = false;

}

}

}