在asp.net中评估

时间:2009-11-25 19:25:41

标签: c# asp.net

 public void item_bound(object sender,DataGridItemEventArgs e)
        {
            try
            {
                if((e.Item.ItemType  == ListItemType.Item) || (e.Item.ItemType  == ListItemType.AlternatingItem))`enter code here`
                {
                    string  Status  =(string)DataBinder.**Eval**(e.Item.DataItem,"customer_status");
                    Image Image = new Image();
                    Image = (Image)e.Item.Cells[1].FindControl("imgbtnstatus");
                    //Image.Command +=new CommandEventHandler(Image_Command);
                    //Image.Attributes.Add("SEmpId  ", SEmpId );
                    if (Status == "Active")
                        Image.ImageUrl = "~/images/activeuser.png";
                    else
                        Image.ImageUrl = "~/images/inactiveuser.png";
                }
            }
            catch(Exception ex){Response.Write(ex.ToString());
            }
        }

这是运行时绑定datagrid中用户的活动和非活动映像的代码...

我想知道上面代码中Eval的用途......

2 个答案:

答案 0 :(得分:2)

Eval从数据源中的当前项获取并评估“customer_status”值。

答案 1 :(得分:0)

我同意麦凯的回答;我只是想我会对此进行一些扩展:

DataBinder对象也作为GetIndexedPropertyValue函数,允许您检索数组元素或字典等内容。

例如,您可以使用DataBinder.GetIndexedPropertyValue(e.Item.DataItem,“[0]”)来获取数组的第一个元素,或者您可以执行DataBinder.GetIndexedPropertyValue(e.Item.DataItem,“[ name]“)使用”name“键从字典中获取值。

虽然可能有理由在代码隐藏中执行此操作,但问题中的大部分代码都可以在ASP.Net标记中完成:

<asp:Image ID="imgbtnstatus" runat="server" ImageUrl='<%# ((string)DataBinder.Eval(Container.DataItem,"customer_status") == "Active") ? "~/images/activeuser.png" : "~/images/inactiveuser.png" %>' />

此外,由于.Net 2.0已经有一个Eval函数可以替换DataBinder.Eval(Container.DataItem,...)。我的示例中的ASP标记可以写成如下:

<asp:Image ID="imgbtnstatus" runat="server" ImageUrl='<%# ((string)Eval("customer_status") == "Active") ? "~/images/activeuser.png" : "~/images/inactiveuser.png" %>' />

Eval函数也可以通过传递方括号中的字符串来检索类似于DataBinder.GetIndexedPropertyValue函数的值。