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的用途......
答案 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函数的值。