Mastering DataBinding In Asp.net
<%# DataBinder.Eval(Container.DataItem, "customerId") %>
<%# ((DataRowView)Container.DataItem)["customerId"] %>
<%# ((User)Container.DataItem).UserName%>
<%# FormatDate(DataBinder.Eval(Container.DataItem, "Ordered"))%>
<%# FormatMoney(DataBinder.Eval(Container.DataItem, "Amount"))%>
Visible='<%# (int)DataBinder.Eval(Container.DataItem, "Pets.Count") > 0 %>'>
后台:
Nested Data
DataSource='<%# DataBinder.Eval(Container.DataItem, "CutomerOrders")%>'
DataSource="<%# ((Owner)Container.DataItem).Pets%>"
DataSource='<%# DataBinder.Eval(Container.DataItem, "Pets")%>'
DataItem:如果你用的数据源是Table、DataSet之类的话,那么它可以强制类型转换为DataRowView;如果你用的是自定义实体集合,那么它可以强制类型转换为相应的实体。
<%# ((DataRowView)Container.DataItem)["customerId"] %>
<%# ((User)Container.DataItem).UserName%>
<%# FormatDate(DataBinder.Eval(Container.DataItem, "Ordered"))%>
<%# FormatMoney(DataBinder.Eval(Container.DataItem, "Amount"))%>
Visible='<%# (int)DataBinder.Eval(Container.DataItem, "Pets.Count") > 0 %>'>
后台:
protected string FormatDate(object date) {
if (date == DBNull.Value){
return "n/a";
}
try{
return ((DateTime)date).ToShortDateString();
}catch{
return "n/a";
}
}
protected string FormatMoney(object amount) {
if (amount == DBNull.Value){
return String.Format("{0:C}", 0);
}
return String.Format("{0:C}", amount);
}
if (date == DBNull.Value){
return "n/a";
}
try{
return ((DateTime)date).ToShortDateString();
}catch{
return "n/a";
}
}
protected string FormatMoney(object amount) {
if (amount == DBNull.Value){
return String.Format("{0:C}", 0);
}
return String.Format("{0:C}", amount);
}
protected void itemDataBoundRepeater_ItemDataBound(object source,
RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.AlternatingItem ||
e.Item.ItemType == ListItemType.Item){
Literal lit = (Literal)e.Item.FindControl("see");
if (lit != null){
Owner owner = (Owner)e.Item.DataItem;
if (owner.Pets.Count == 0){
lit.Text = "no pets";
}else{
lit.Text = "see pets";
}
}
}
}
RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.AlternatingItem ||
e.Item.ItemType == ListItemType.Item){
Literal lit = (Literal)e.Item.FindControl("see");
if (lit != null){
Owner owner = (Owner)e.Item.DataItem;
if (owner.Pets.Count == 0){
lit.Text = "no pets";
}else{
lit.Text = "see pets";
}
}
}
}
Nested Data
ds.Relations.Add(new DataRelation("CustomerOrders",
ds.Tables[0].Columns["CustomerId"],
ds.Tables[1].Columns["CustomerId"]));
DataSource='<%# ((DataRowView)Container.DataItem).CreateChildView("CustomerOrders")%>'ds.Tables[0].Columns["CustomerId"],
ds.Tables[1].Columns["CustomerId"]));
DataSource='<%# DataBinder.Eval(Container.DataItem, "CutomerOrders")%>'
DataSource="<%# ((Owner)Container.DataItem).Pets%>"
DataSource='<%# DataBinder.Eval(Container.DataItem, "Pets")%>'
1 protected void eventRepeater_ItemCommand(object s,
2
3 RepeaterCommandEventArgs e) {
4 int customerId = Convert.ToInt32(e.CommandArgument);
5 switch (e.CommandName.ToUpper()){
6 case "DELETE":
7 CustomerUtility.DeleteCustomer(customerId);
8 BindEventRepeater(false);
9 break;
10 case "Add":
11 //doesn't actually do antyhing right now.
12 break;
13 }
14 }
2
3 RepeaterCommandEventArgs e) {
4 int customerId = Convert.ToInt32(e.CommandArgument);
5 switch (e.CommandName.ToUpper()){
6 case "DELETE":
7 CustomerUtility.DeleteCustomer(customerId);
8 BindEventRepeater(false);
9 break;
10 case "Add":
11 //doesn't actually do antyhing right now.
12 break;
13 }
14 }
DataItem:如果你用的数据源是Table、DataSet之类的话,那么它可以强制类型转换为DataRowView;如果你用的是自定义实体集合,那么它可以强制类型转换为相应的实体。