GridView嵌套应用实例
来源:互联网 发布:excel筛选两表重复数据 编辑:程序博客网 时间:2024/05/17 21:59
通过GridView+Access数据库实现列表内容的嵌套,并实现分页,添加/更新等操作
同时也实现了按照各类字段的排序
关键代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!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 id="Head1" runat="server"> <title>Editable Nested Grid View</title> <script language=javascript type="text/javascript"> function expandcollapse(obj,row) { var div = document.getElementById(obj); var img = document.getElementById('img' + obj); if (div.style.display == "none") { div.style.display = "block"; if (row == 'alt') { img.src = "minus.gif"; } else { img.src = "minus.gif"; } img.alt = "Close to view other Customers"; } else { div.style.display = "none"; if (row == 'alt') { img.src = "plus.gif"; } else { img.src = "plus.gif"; } img.alt = "Expand to show Orders"; } } </script></head><body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" AllowPaging="True" BackColor="#f1f1f1" AutoGenerateColumns=false DataSourceID="AccessDataSource1" DataKeyNames="CustomerID" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 32px" ShowFooter=true Font-Size=Small Font-Names="Verdana" runat="server" GridLines=None OnRowDataBound="GridView1_RowDataBound" OnRowCommand = "GridView1_RowCommand" OnRowUpdating = "GridView1_RowUpdating" BorderStyle=Outset OnRowDeleting = "GridView1_RowDeleting" OnRowDeleted = "GridView1_RowDeleted" OnRowUpdated = "GridView1_RowUpdated" AllowSorting=true> <RowStyle BackColor="Gainsboro" /> <AlternatingRowStyle BackColor="White" /> <HeaderStyle BackColor="#0083C1" ForeColor="White"/> <FooterStyle BackColor="White" /> <Columns> <asp:TemplateField> <ItemTemplate> <a href="javascript:expandcollapse('div<%# Eval("CustomerID") %>', 'one');"> <img id="imgdiv<%# Eval("CustomerID") %>" alt="Click to show/hide Orders for Customer <%# Eval("CustomerID") %>" width="9px" border="0" src="plus.gif"/> </a> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Customer ID" SortExpression="CustomerID"> <ItemTemplate> <asp:Label ID="lblCustomerID" Text='<%# Eval("CustomerID") %>' runat="server"></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:Label ID="lblCustomerID" Text='<%# Eval("CustomerID") %>' runat="server"></asp:Label> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtCustomerID" Text='' runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Company Name" SortExpression="CompanyName"> <ItemTemplate><%# Eval("CompanyName") %></ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtCompanyName" Text='<%# Eval("CompanyName") %>' runat="server"></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtCompanyName" Text='' runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Contact Name" SortExpression="ContactName"> <ItemTemplate><%# Eval("ContactName") %></ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtContactName" Text='<%# Eval("ContactName") %>' runat="server"></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtContactName" Text='' runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Contact Title" SortExpression="ContactTitle"> <ItemTemplate><%# Eval("ContactTitle")%></ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtContactTitle" Text='<%# Eval("ContactTitle") %>' runat="server"></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtContactTitle" Text='' runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Address" SortExpression="Address"> <ItemTemplate><%# Eval("Address")%></ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtAddress" Text='<%# Eval("Address") %>' runat="server"></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtAddress" Text='' runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:CommandField HeaderText="Edit" ShowEditButton="True" /> <asp:TemplateField HeaderText="Delete"> <ItemTemplate> <asp:LinkButton ID="linkDeleteCust" CommandName="Delete" runat="server">Delete</asp:LinkButton> </ItemTemplate> <FooterTemplate> <asp:LinkButton ID="linkAddCust" CommandName="AddCustomer" runat="server">Add</asp:LinkButton> </FooterTemplate> </asp:TemplateField> <asp:TemplateField> <ItemTemplate> <tr> <td colspan="100%"> <div id="div<%# Eval("CustomerID") %>" style="display:none;position:relative;left:15px;OVERFLOW: auto;WIDTH:97%" > <asp:GridView ID="GridView2" AllowPaging="True" AllowSorting="true" BackColor="White" Width=100% Font-Size=X-Small AutoGenerateColumns=false Font-Names="Verdana" runat="server" DataKeyNames="CustomerID" ShowFooter=true OnPageIndexChanging="GridView2_PageIndexChanging" OnRowUpdating = "GridView2_RowUpdating" OnRowCommand = "GridView2_RowCommand" OnRowEditing = "GridView2_RowEditing" GridLines=None OnRowUpdated = "GridView2_RowUpdated" OnRowCancelingEdit = "GridView2_CancelingEdit" OnRowDataBound = "GridView2_RowDataBound" OnRowDeleting = "GridView2_RowDeleting" OnRowDeleted = "GridView2_RowDeleted" OnSorting = "GridView2_Sorting" BorderStyle=Double BorderColor="#0083C1"> <RowStyle BackColor="Gainsboro" /> <AlternatingRowStyle BackColor="White" /> <HeaderStyle BackColor="#0083C1" ForeColor="White"/> <FooterStyle BackColor="White" /> <Columns> <asp:TemplateField HeaderText="Order ID" SortExpression="OrderID"> <ItemTemplate> <asp:Label ID="lblOrderID" Text='<%# Eval("OrderID") %>' runat="server"></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:Label ID="lblOrderID" Text='<%# Eval("OrderID") %>' runat="server"></asp:Label> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Freight" SortExpression="Freight"> <ItemTemplate><%# Eval("Freight")%></ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtFreight" Text='<%# Eval("Freight")%>' runat="server"></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtFreight" Text='' runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Shipper Name" SortExpression="ShipName"> <ItemTemplate><%# Eval("ShipName")%></ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtShipperName" Text='<%# Eval("ShipName")%>' runat="server"></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtShipperName" Text='' runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Ship Address" SortExpression="ShipAddress"> <ItemTemplate><%# Eval("ShipAddress")%></ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtShipAdress" Text='<%# Eval("ShipAddress")%>' runat="server"></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtShipAdress" Text='' runat="server"></asp:TextBox> </FooterTemplate> </asp:TemplateField> <asp:CommandField HeaderText="Edit" ShowEditButton="True" /> <asp:TemplateField HeaderText="Delete"> <ItemTemplate> <asp:LinkButton ID="linkDeleteCust" CommandName="Delete" runat="server">Delete</asp:LinkButton> </ItemTemplate> <FooterTemplate> <asp:LinkButton ID="linkAddOrder" CommandName="AddOrder" runat="server">Add</asp:LinkButton> </FooterTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </td> </tr> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="App_Data/Northwind.mdb" SelectCommand="SELECT [Customers].[CustomerID], [Customers].[CompanyName],[Customers].[ContactName],[Customers].[ContactTitle],[Customers].[Address] FROM [Customers] ORDER BY [Customers].[CustomerID]"></asp:AccessDataSource> </div> </form></body></html>
后台代码:
//' ---------------------------------------------------------//' Satya Kanithi's All in one GridView//' ---------------------------------------------------------//'=======================================================//' FileName : WebForm1.aspx//' Description : Multi Purpose GridView, Which can be expandable to many child grids //' Date of Creation : Aug, 2007//' Author : Satya Kanithi//'=======================================================//该源码下载自www.51aspx.com(51aspx.com)using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.OleDb;public partial class _Default : System.Web.UI.Page{ #region Variables string gvUniqueID = String.Empty; int gvNewPageIndex = 0; int gvEditIndex = -1; string gvSortExpr = String.Empty; private string gvSortDir { get { return ViewState["SortDirection"] as string ?? "ASC"; } set { ViewState["SortDirection"] = value; } } #endregion //This procedure returns the Sort Direction private string GetSortDirection() { switch (gvSortDir) { case "ASC": gvSortDir = "DESC"; break; case "DESC": gvSortDir = "ASC"; break; } return gvSortDir; } //This procedure prepares the query to bind the child GridView private AccessDataSource ChildDataSource(string strCustometId, string strSort) { string strQRY = ""; AccessDataSource dsTemp = new AccessDataSource(); dsTemp.DataFile = "App_Data/Northwind.mdb"; strQRY = "SELECT [Orders].[CustomerID],[Orders].[OrderID]," + "[Orders].[ShipAddress],[Orders].[Freight],[Orders].[ShipName] FROM [Orders]" + " WHERE [Orders].[CustomerID] = '" + strCustometId + "'" + "UNION ALL " + "SELECT '" + strCustometId + "','','','','' FROM [Orders] WHERE [Orders].[CustomerID] = '" + strCustometId + "'" + "HAVING COUNT(*)=0 " + strSort; dsTemp.SelectCommand = strQRY; return dsTemp; } protected void Page_Load(object sender, EventArgs e) { } #region GridView1 Event Handlers //This event occurs for each row protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { GridViewRow row = e.Row; string strSort = string.Empty; // Make sure we aren't in header/footer rows if (row.DataItem == null) { return; } //Find Child GridView control GridView gv = new GridView(); gv = (GridView)row.FindControl("GridView2"); //Check if any additional conditions (Paging, Sorting, Editing, etc) to be applied on child GridView if (gv.UniqueID == gvUniqueID) { gv.PageIndex = gvNewPageIndex; gv.EditIndex = gvEditIndex; //Check if Sorting used if (gvSortExpr != string.Empty) { GetSortDirection(); strSort = " ORDER BY " + string.Format("{0} {1}", gvSortExpr, gvSortDir); } //Expand the Child grid ClientScript.RegisterStartupScript(GetType(), "Expand", "<SCRIPT LANGUAGE='javascript'>expandcollapse('div" + ((DataRowView)e.Row.DataItem)["CustomerID"].ToString() + "','one');</script>"); } //Prepare the query for Child GridView by passing the Customer ID of the parent row gv.DataSource = ChildDataSource(((DataRowView)e.Row.DataItem)["CustomerID"].ToString(), strSort); gv.DataBind(); //Add delete confirmation message for Customer LinkButton l = (LinkButton)e.Row.FindControl("linkDeleteCust"); l.Attributes.Add("onclick", "javascript:return " + "confirm('Are you sure you want to delete this Customer " + DataBinder.Eval(e.Row.DataItem, "CustomerID") + "')"); } //This event occurs for any operation on the row of the grid protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { //Check if Add button clicked if (e.CommandName == "AddCustomer") { try { //Get the values stored in the text boxes string strCompanyName = ((TextBox)GridView1.FooterRow.FindControl("txtCompanyName")).Text; string strContactName = ((TextBox)GridView1.FooterRow.FindControl("txtContactName")).Text; string strContactTitle = ((TextBox)GridView1.FooterRow.FindControl("txtContactTitle")).Text; string strAddress = ((TextBox)GridView1.FooterRow.FindControl("txtAddress")).Text; string strCustomerID = ((TextBox)GridView1.FooterRow.FindControl("txtCustomerID")).Text; //Prepare the Insert Command of the DataSource control string strSQL = ""; strSQL = "INSERT INTO Customers (CustomerID, CompanyName, ContactName, " + "ContactTitle, Address) VALUES ('" + strCustomerID + "','" + strCompanyName + "','" + strContactName + "','" + strContactTitle + "','" + strAddress + "')"; AccessDataSource1.InsertCommand = strSQL; AccessDataSource1.Insert(); ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Customer added successfully');</script>"); //Re bind the grid to refresh the data GridView1.DataBind(); } catch (Exception ex) { ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + ex.Message.ToString().Replace("'", "") + "');</script>"); } } } //This event occurs on click of the Update button protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { //Get the values stored in the text boxes string strCompanyName = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtCompanyName")).Text; string strContactName = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtContactName")).Text; string strContactTitle = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtContactTitle")).Text; string strAddress = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtAddress")).Text; string strCustomerID = ((Label)GridView1.Rows[e.RowIndex].FindControl("lblCustomerID")).Text; try { //Prepare the Update Command of the DataSource control string strSQL = ""; strSQL = "UPDATE Customers set CompanyName = '" + strCompanyName + "'" + ",ContactName = '" + strContactName + "'" + ",ContactTitle = '" + strContactTitle + "'" + ",Address = '" + strAddress + "'" + " WHERE CustomerID = '" + strCustomerID + "'"; AccessDataSource1.UpdateCommand = strSQL; AccessDataSource1.Update(); ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Customer updated successfully');</script>"); } catch { } } //This event occurs after RowUpdating to catch any constraints while updating protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) { //Check if there is any exception while deleting if (e.Exception != null) { ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + e.Exception.Message.ToString().Replace("'", "") + "');</script>"); e.ExceptionHandled = true; } } //This event occurs on click of the Delete button protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { //Get the value string strCustomerID = ((Label)GridView1.Rows[e.RowIndex].FindControl("lblCustomerID")).Text; //Prepare the delete Command of the DataSource control string strSQL = ""; try { strSQL = "DELETE from Customers WHERE CustomerID = '" + strCustomerID + "'"; AccessDataSource1.DeleteCommand = strSQL; AccessDataSource1.Delete(); ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Customer deleted successfully');</script>"); } catch { } } //This event occurs after RowDeleting to catch any constraints while deleting protected void GridView1_RowDeleted(object sender, GridViewDeletedEventArgs e) { //Check if there is any exception while deleting if (e.Exception != null) { ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + e.Exception.Message.ToString().Replace("'", "") + "');</script>"); e.ExceptionHandled = true; } } #endregion #region GridView2 Event Handlers protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e) { GridView gvTemp = (GridView)sender; gvUniqueID = gvTemp.UniqueID; gvNewPageIndex = e.NewPageIndex; GridView1.DataBind(); } protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "AddOrder") { try { GridView gvTemp = (GridView)sender; gvUniqueID = gvTemp.UniqueID; //Get the values stored in the text boxes string strCustomerID = gvTemp.DataKeys[0].Value.ToString(); //Customer ID is stored as DataKeyNames string strFreight = ((TextBox)gvTemp.FooterRow.FindControl("txtFreight")).Text; string strShipperName = ((TextBox)gvTemp.FooterRow.FindControl("txtShipperName")).Text; string strShipAdress = ((TextBox)gvTemp.FooterRow.FindControl("txtShipAdress")).Text; //Prepare the Insert Command of the DataSource control string strSQL = ""; strSQL = "INSERT INTO Orders (CustomerID, Freight, ShipName, " + "ShipAddress) VALUES ('" + strCustomerID + "'," + float.Parse(strFreight) + ",'" + strShipperName + "','" + strShipAdress + "')"; AccessDataSource1.InsertCommand = strSQL; AccessDataSource1.Insert(); ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Order added successfully');</script>"); GridView1.DataBind(); } catch (Exception ex) { ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + ex.Message.ToString().Replace("'", "") + "');</script>"); } } } protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e) { GridView gvTemp = (GridView)sender; gvUniqueID = gvTemp.UniqueID; gvEditIndex = e.NewEditIndex; GridView1.DataBind(); } protected void GridView2_CancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView gvTemp = (GridView)sender; gvUniqueID = gvTemp.UniqueID; gvEditIndex = -1; GridView1.DataBind(); } protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e) { try { GridView gvTemp = (GridView)sender; gvUniqueID = gvTemp.UniqueID; //Get the values stored in the text boxes string strOrderID = ((Label)gvTemp.Rows[e.RowIndex].FindControl("lblOrderID")).Text; string strFreight = ((TextBox)gvTemp.Rows[e.RowIndex].FindControl("txtFreight")).Text; string strShipperName = ((TextBox)gvTemp.Rows[e.RowIndex].FindControl("txtShipperName")).Text; string strShipAdress = ((TextBox)gvTemp.Rows[e.RowIndex].FindControl("txtShipAdress")).Text; //Prepare the Update Command of the DataSource control AccessDataSource dsTemp = new AccessDataSource(); dsTemp.DataFile = "App_Data/Northwind.mdb"; string strSQL = ""; strSQL = "UPDATE Orders set Freight = " + float.Parse(strFreight) + "" + ",ShipName = '" + strShipperName + "'" + ",ShipAddress = '" + strShipAdress + "'" + " WHERE OrderID = " + strOrderID; dsTemp.UpdateCommand = strSQL; dsTemp.Update(); ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Order updated successfully');</script>"); //Reset Edit Index gvEditIndex = -1; GridView1.DataBind(); } catch { } } protected void GridView2_RowUpdated(object sender, GridViewUpdatedEventArgs e) { //Check if there is any exception while deleting if (e.Exception != null) { ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + e.Exception.Message.ToString().Replace("'", "") + "');</script>"); e.ExceptionHandled = true; } } protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e) { GridView gvTemp = (GridView)sender; gvUniqueID = gvTemp.UniqueID; //Get the value string strOrderID = ((Label)gvTemp.Rows[e.RowIndex].FindControl("lblOrderID")).Text; //Prepare the Update Command of the DataSource control string strSQL = ""; try { strSQL = "DELETE from Orders WHERE OrderID = " + strOrderID; AccessDataSource dsTemp = new AccessDataSource(); dsTemp.DataFile = "App_Data/Northwind.mdb"; dsTemp.DeleteCommand = strSQL; dsTemp.Delete(); ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Order deleted successfully');</script>"); GridView1.DataBind(); } catch { } } protected void GridView2_RowDeleted(object sender, GridViewDeletedEventArgs e) { //Check if there is any exception while deleting if (e.Exception != null) { ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + e.Exception.Message.ToString().Replace("'", "") + "');</script>"); e.ExceptionHandled = true; } } protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e) { //Check if this is our Blank Row being databound, if so make the row invisible if (e.Row.RowType == DataControlRowType.DataRow) { if (((DataRowView)e.Row.DataItem)["OrderID"].ToString() == String.Empty) e.Row.Visible = false; } } protected void GridView2_Sorting(object sender, GridViewSortEventArgs e) { GridView gvTemp = (GridView)sender; gvUniqueID = gvTemp.UniqueID; gvSortExpr = e.SortExpression; GridView1.DataBind(); } #endregion }
源程序下载地址1:http://download.csdn.net/detail/lovegonghui/9000609
源程序下载地址2:http://down.51cto.com/data/2081891
0 0
- GridView嵌套应用实例
- gridview嵌套实例
- GridView大全应用实例
- .Net GridView 系列:应用GridView 嵌套显示主从表
- Asp.net GridView 应用实例
- 嵌套GridView
- gridview嵌套
- GridView嵌套
- GridView嵌套
- gridview嵌套gridview
- GridView中嵌套GridView
- gridview嵌套gridview
- GridView中嵌套GridView
- C++嵌套类和局部类应用实例
- 关于Repeater中嵌套GridView以及GridView中checkbox的全选功能的实例
- gridview嵌套gridview的方法
- scroillview 嵌套gridview gridview置顶
- android GridView控件嵌套GridView
- Android JNI 学习笔记
- Spring之LoadTimeWeaver——一个需求引发的思考
- __block与__weak的区别理解
- 拼音翻译成阿拉伯数字
- SQL ROUND 的用法(是否四舍五入)
- GridView嵌套应用实例
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- android的序列化接口Parcelable
- 关于使用CKplayer播放m3u8视频出现没有视频的问题分析
- hbase增加backup master
- JVM学习笔记--类文件结构
- Android之Dialog详解
- zb的生日
- HDOJ 2122 Ice_cream’s world III(最小生成树--prime 水)