DATALIST嵌套datalist,要求只查询一次数据库

aspx   HTML code <% @ Page Language = " C# " AutoEventWireup = " true " CodeFile = " DataListNesting.aspx.cs " Inherits = " DataListNesting " %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
   
< title > 无标题页 </ title >
</ head >
< body >
   
< form id ="form1" runat ="server" >
   
< div >
       
< asp:DataList ID ="DataList1" runat ="server" >
           
< ItemTemplate >
               
< asp:Label ID ="Label1" runat ="server" Text ='<%# Eval("OrderID") % > '> </ asp:Label >
               
< asp:Label ID ="Label2" runat ="server" Text ='<%# Eval("CustomerID") % > '> </ asp:Label >
               
< asp:DataList ID ="DataList2" runat ="server" DataSource ='<%# (Container.DataItem as System.Data.DataRowView).Row.GetChildRows("myRelation") % > '>
                   
< ItemTemplate >
                       
&nbsp;&nbsp;
                       
< asp:Label ID ="Label1" runat ="server" Text ='<%# (Container.DataItem as System.Data.DataRow)["ProductID"] % > '> </ asp:Label >
                       
< asp:Label ID ="Label2" runat ="server" Text ='<%# (Container.DataItem as System.Data.DataRow)["UnitPrice"] % > '> </ asp:Label >
                       
< asp:Label ID ="Label3" runat ="server" Text ='<%# (Container.DataItem as System.Data.DataRow)["Quantity"] % > '> </ asp:Label >
                   
</ ItemTemplate >
               
</ asp:DataList >
           
</ ItemTemplate >
       
</ asp:DataList >
   
</ div >
   
</ form >
</ body >
</ html >
aspx.cs

  
  
C# code
     
     
using System.Data.SqlClient; public partial class DataListNesting : System.Web.UI.Page { private void BindList() { SqlConnection cn = new SqlConnection( @" server=.\sqlexpress;uid=sa;pwd=;database=northwind; " ); SqlDataAdapter da = new SqlDataAdapter( " select OrderID, CustomerID from Orders; select OrderID, ProductID, UnitPrice, Quantity from [Order Details] " , cn); DataSet ds = new DataSet(); cn.Open(); da.Fill(ds); cn.Close(); ds.Tables[ 0 ].TableName = " Orders " ; ds.Tables[ 1 ].TableName = " OrderDetails " ; DataRelation ordersToOrderDetails = ds.Relations.Add( " myRelation " , ds.Tables[ " Orders " ].Columns[ " OrderID " ], ds.Tables[ " OrderDetails " ].Columns[ " OrderID " ]); DataList1.DataSource = ds.Tables[ " Orders " ]; DataList1.DataBind(); } private void Page_Load( object sender, System.EventArgs e) { if ( ! IsPostBack) { BindList(); } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设前端传来的数据格式如下: ```json [ { "level": 1, "content": "Level 1 Content", "child": [ { "level": 2, "content": "Level 2 Content", "child": [ { "level": 3, "content": "Level 3 Content", "child": [] } ] } ] }, { "level": 1, "content": "Level 1 Content 2", "child": [] } ] ``` 接收数据的后端代码可以如下: ```java @RestController @RequestMapping("/data") public class DataController { @Autowired private DataRepository dataRepository; @PostMapping public void saveData(@RequestBody List<Data> dataList) { for (Data data : dataList) { save(data); } } @DeleteMapping("/{id}") public void deleteData(@PathVariable("id") Long id) { dataRepository.deleteById(id); } @GetMapping("/{id}") public Data getData(@PathVariable("id") Long id) { return dataRepository.findById(id) .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); } private void save(Data data) { // 存储到数据库 dataRepository.save(data); // 递归存储子节点 for (Data child : data.getChild()) { // 设置父节点id child.setParentId(data.getId()); save(child); } } } ``` 其 `Data` 类表示存储数据的实体类,代码如下: ```java @Entity @Table(name = "data") public class Data { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Integer level; private String content; @Column(name = "parent_id") private Long parentId; @OneToMany(mappedBy = "parentId", cascade = CascadeType.ALL) private List<Data> child = new ArrayList<>(); // getter 和 setter 省略 } ``` 在接收到前端传来的数据后,我们使用 `save` 方法递归地存储数据,同时将子节点的 `parentId` 设置为当前节点的 `id`。在删除数据时,我们直接根据 `id` 删除即可。在查询数据时,我们根据 `id` 查询数据并返回,如果数据不存在,则抛出 `NOT_FOUND` 异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值