This commit is contained in:
2026-06-14 16:24:24 +08:00
parent 96e003d2f4
commit 718d386f3f
3 changed files with 458 additions and 31 deletions
@@ -37,32 +37,159 @@
<f:ContentPanel ID="contentPanel1" runat="server" ShowHeader="false" >
<div id="app"></div>
</f:ContentPanel>
<f:Grid ID="Grid1" ShowBorder="true" ShowHeader="false" Title="" EnableCollapse="true" Hidden="true"
runat="server" BoxFlex="1" DataKeyNames="id" EnableColumnLines="true" DataIDField="id" OnRowDoubleClick="Grid1_RowDoubleClick"
EnableTextSelection="True" EnableRowDoubleClickEvent="true" AllowColumnLocking="true">
<Columns>
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号" Width="60px" HeaderTextAlign="Center" TextAlign="Center"/>
<f:RenderField Width="70px" HeaderText="管线号" ColumnID="pipe_no" DataField="pipe_no"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center" >
</f:RenderField>
<f:RenderField Width="70px" HeaderText="图号" ColumnID="drawing_number" DataField="drawing_number"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center" >
</f:RenderField>
<f:RenderField Width="70px" HeaderText="类型" ColumnID="category" DataField="category"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center" >
</f:RenderField>
<f:RenderField Width="70px" HeaderText="规格" ColumnID="spec" DataField="spec"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center" >
</f:RenderField>
<f:RenderField Width="70px" HeaderText="数量" ColumnID="qty" DataField="qty"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center" >
</f:RenderField>
<f:RenderField Width="70px" HeaderText="描述" ColumnID="description" DataField="description" ExpandUnusedSpace="true"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center" >
</f:RenderField>
</Columns>
</f:Grid>
<f:TabStrip ID="TabStrip1" ShowBorder="true" TabPosition="Top" Height="700"
EnableTabCloseMenu="false" ActiveTabIndex="0" Hidden="true" runat="server">
<Tabs>
<f:Tab Title="材料表明细" BodyPadding="10px" Layout="Fit" runat="server">
<Items>
<f:RegionPanel ID="RegionPanel1" ShowBorder="false" runat="server" Margin="5px">
<Toolbars>
<f:Toolbar ID="Toolbar2" Position="Top" runat="server" ToolbarAlign="Right">
<Items>
<f:Button ID="btnOut1" OnClick="btnOut1_Click" runat="server" Text="导出" Icon="TableGo"
EnableAjax="false" DisableControlBeforePostBack="false">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Regions>
<f:Region ID="Region2" ShowBorder="false" ShowHeader="false" Position="Center"
AutoScroll="true" EnableAjax="true" MinHeight="100px"
BoxConfigAlign="Stretch" BoxConfigPosition="Left" runat="server">
<Items>
<f:Grid ID="Grid1" ShowBorder="true" ShowHeader="false" Title="" EnableCollapse="true"
runat="server" BoxFlex="1" DataKeyNames="id" EnableColumnLines="true" DataIDField="id"
OnRowDoubleClick="Grid1_RowDoubleClick"
EnableTextSelection="True" EnableRowDoubleClickEvent="true" AllowColumnLocking="true">
<Columns>
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号" Width="60px" HeaderTextAlign="Center" TextAlign="Center"/>
<f:RenderField Width="70px" HeaderText="管线号" ColumnID="pipe_no" DataField="pipe_no"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="70px" HeaderText="图号" ColumnID="drawing_number" DataField="drawing_number"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="70px" HeaderText="类型" ColumnID="category" DataField="category"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="70px" HeaderText="规格" ColumnID="spec" DataField="spec"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="70px" HeaderText="数量" ColumnID="qty" DataField="qty"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="70px" HeaderText="描述" ColumnID="description" DataField="description" ExpandUnusedSpace="true"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
</Columns>
</f:Grid>
</Items>
</f:Region>
</Regions>
</f:RegionPanel>
</Items>
</f:Tab>
<f:Tab Title="图纸材料表" BodyPadding="10px" Layout="Fit" runat="server">
<Items>
<f:RegionPanel ID="RegionPanel2" ShowBorder="false" runat="server" Margin="5px">
<Toolbars>
<f:Toolbar ID="Toolbar3" Position="Top" runat="server" ToolbarAlign="Right">
<Items>
<f:Button ID="btnOut2" OnClick="btnOut2_Click" runat="server" Text="导出" Icon="TableGo"
EnableAjax="false" DisableControlBeforePostBack="false">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Regions>
<f:Region ID="Region3" ShowBorder="false" ShowHeader="false" Position="Center"
AutoScroll="true" EnableAjax="true" MinHeight="100px"
BoxConfigAlign="Stretch" BoxConfigPosition="Left" runat="server">
<Items>
<f:Grid ID="Grid2" ShowBorder="true" ShowHeader="false" Title="按图号合并材料表" EnableCollapse="true"
runat="server" BoxFlex="1" DataKeyNames="id" EnableColumnLines="true" DataIDField="id"
EnableTextSelection="True" AllowColumnLocking="true">
<Columns>
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号" Width="60px" HeaderTextAlign="Center" TextAlign="Center"/>
<f:RenderField Width="100px" HeaderText="图号" ColumnID="drawing_number" DataField="drawing_number"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" HeaderText="类型" ColumnID="category" DataField="category"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" HeaderText="规格" ColumnID="spec" DataField="spec"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" HeaderText="数量" ColumnID="qty" DataField="qty"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" HeaderText="描述" ColumnID="description" DataField="description" ExpandUnusedSpace="true"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
</Columns>
</f:Grid>
</Items>
</f:Region>
</Regions>
</f:RegionPanel>
</Items>
</f:Tab>
<f:Tab Title="管道材料表" BodyPadding="10px" Layout="Fit" runat="server">
<Items>
<f:RegionPanel ID="RegionPanel3" ShowBorder="false" runat="server" Margin="5px">
<Toolbars>
<f:Toolbar ID="Toolbar4" Position="Top" runat="server" ToolbarAlign="Right">
<Items>
<f:Button ID="btnOut3" OnClick="btnOut3_Click" runat="server" Text="导出" Icon="TableGo"
EnableAjax="false" DisableControlBeforePostBack="false">
</f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Regions>
<f:Region ID="Region4" ShowBorder="false" ShowHeader="false" Position="Center"
AutoScroll="true" EnableAjax="true" MinHeight="100px"
BoxConfigAlign="Stretch" BoxConfigPosition="Left" runat="server">
<Items>
<f:Grid ID="Grid3" ShowBorder="true" ShowHeader="false" Title="按管线号合并材料表" EnableCollapse="true"
runat="server" BoxFlex="1" DataKeyNames="id" EnableColumnLines="true" DataIDField="id"
EnableTextSelection="True" AllowColumnLocking="true">
<Columns>
<f:RowNumberField EnablePagingNumber="true" HeaderText="序号" Width="60px" HeaderTextAlign="Center" TextAlign="Center"/>
<f:RenderField Width="100px" HeaderText="管线号" ColumnID="pipe_no" DataField="pipe_no"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" HeaderText="类型" ColumnID="category" DataField="category"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" HeaderText="规格" ColumnID="spec" DataField="spec"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" HeaderText="数量" ColumnID="qty" DataField="qty"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField Width="100px" HeaderText="描述" ColumnID="description" DataField="description" ExpandUnusedSpace="true"
FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
</Columns>
</f:Grid>
</Items>
</f:Region>
</Regions>
</f:RegionPanel>
</Items>
</f:Tab>
</Tabs>
</f:TabStrip>
</Items>
</f:Panel>
@@ -100,7 +100,7 @@ namespace FineUIPro.Web.HJGL.DataIn
protected void btnSave_Click(object sender, EventArgs e)
{
Grid1.Hidden = true;
TabStrip1.Hidden = true;
contentPanel1.Hidden =false ;
string rootPath = Server.MapPath("~/");
Dictionary<string,List<int>> dic= new Dictionary<string, List<int>>();
@@ -312,7 +312,7 @@ namespace FineUIPro.Web.HJGL.DataIn
protected void btnAudit_Click(object sender, EventArgs e)
{
Grid1.Hidden = false;
TabStrip1.Hidden = false;
contentPanel1.Hidden = true;
btnAudit.Hidden = true;
btnSave.Hidden = false;
@@ -423,12 +423,98 @@ namespace FineUIPro.Web.HJGL.DataIn
private void BindGrid()
{
Grid1.DataSource = dt;
Grid1.DataBind();
// Grid2: 按图号合并 — 图号、类型、规格、描述相同的,数量累加
if (dt != null && dt.Rows.Count > 0)
{
DataTable dtGroupByDrawing = new DataTable();
dtGroupByDrawing.Columns.Add("id");
dtGroupByDrawing.Columns.Add("drawing_number");
dtGroupByDrawing.Columns.Add("category");
dtGroupByDrawing.Columns.Add("spec");
dtGroupByDrawing.Columns.Add("qty");
dtGroupByDrawing.Columns.Add("description");
var groups2 = dt.AsEnumerable()
.GroupBy(r => new
{
drawing_number = r.Field<string>("drawing_number") ?? "",
category = r.Field<string>("category") ?? "",
spec = r.Field<string>("spec") ?? "",
description = r.Field<string>("description") ?? ""
})
.Select(g => new
{
g.Key.drawing_number,
g.Key.category,
g.Key.spec,
g.Key.description,
qty = g.Sum(r => Funs.GetNewDecimalOrZero(r.Field<string>("qty")))
});
foreach (var g in groups2)
{
DataRow newRow = dtGroupByDrawing.NewRow();
newRow["id"] = Guid.NewGuid().ToString();
newRow["drawing_number"] = g.drawing_number;
newRow["category"] = g.category;
newRow["spec"] = g.spec;
newRow["qty"] = g.qty;
newRow["description"] = g.description;
dtGroupByDrawing.Rows.Add(newRow);
}
Grid2.DataSource = dtGroupByDrawing;
}
else
{
Grid2.DataSource = null;
}
Grid2.DataBind();
// Grid3: 按管线号合并 — 类型、规格、描述相同的,数量累加(不展示图号)
if (dt != null && dt.Rows.Count > 0)
{
DataTable dtGroupByPipe = new DataTable();
dtGroupByPipe.Columns.Add("id");
dtGroupByPipe.Columns.Add("pipe_no");
dtGroupByPipe.Columns.Add("category");
dtGroupByPipe.Columns.Add("spec");
dtGroupByPipe.Columns.Add("qty");
dtGroupByPipe.Columns.Add("description");
var groups3 = dt.AsEnumerable()
.GroupBy(r => new
{
pipe_no = r.Field<string>("pipe_no") ?? "",
category = r.Field<string>("category") ?? "",
spec = r.Field<string>("spec") ?? "",
description = r.Field<string>("description") ?? ""
})
.Select(g => new
{
g.Key.pipe_no,
g.Key.category,
g.Key.spec,
g.Key.description,
qty = g.Sum(r => Funs.GetNewDecimalOrZero(r.Field<string>("qty")))
});
foreach (var g in groups3)
{
DataRow newRow = dtGroupByPipe.NewRow();
newRow["id"] = Guid.NewGuid().ToString();
newRow["pipe_no"] = g.pipe_no;
newRow["category"] = g.category;
newRow["spec"] = g.spec;
newRow["qty"] = g.qty;
newRow["description"] = g.description;
dtGroupByPipe.Rows.Add(newRow);
}
Grid3.DataSource = dtGroupByPipe;
}
else
{
Grid3.DataSource = null;
}
Grid3.DataBind();
}
#region
/// <summary>
@@ -465,8 +551,87 @@ namespace FineUIPro.Web.HJGL.DataIn
protected void Window1_Close(object sender, WindowCloseEventArgs e)
{
Grid1.DataSource = dt;
Grid1.DataBind();
BindGrid();
}
#region
/// <summary>
/// 导出材料表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOut1_Click(object sender, EventArgs e)
{
Response.ClearContent();
string filename = Funs.GetNewFileName();
Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("材料表" + filename, System.Text.Encoding.UTF8) + ".xls");
Response.ContentType = "application/excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(GetGridTableHtml(Grid1));
Response.End();
}
/// <summary>
/// 导出其他区域
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOut2_Click(object sender, EventArgs e)
{
Response.ClearContent();
string filename = Funs.GetNewFileName();
Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("图纸材料表" + filename, System.Text.Encoding.UTF8) + ".xls");
Response.ContentType = "application/excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(GetGridTableHtml(Grid2));
Response.End();
}
/// <summary>
/// 导出图纸信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOut3_Click(object sender, EventArgs e)
{
Response.ClearContent();
string filename = Funs.GetNewFileName();
Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("管道材料表" + filename, System.Text.Encoding.UTF8) + ".xls");
Response.ContentType = "application/excel";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(GetGridTableHtml(Grid3));
Response.End();
}
/// <summary>
/// 导出方法
/// </summary>
/// <param name="grid"></param>
/// <returns></returns>
private string GetGridTableHtml(Grid grid)
{
StringBuilder sb = new StringBuilder();
sb.Append("<meta http-equiv=\"content-type\" content=\"application/excel; charset=UTF-8\"/>");
sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");
sb.Append("<tr>");
foreach (GridColumn column in grid.Columns)
{
sb.AppendFormat("<td>{0}</td>", column.HeaderText);
}
sb.Append("</tr>");
foreach (GridRow row in grid.Rows)
{
sb.Append("<tr>");
foreach (GridColumn column in grid.Columns)
{
string html = row.Values[column.ColumnIndex].ToString();
sb.AppendFormat("<td>{0}</td>", html);
}
sb.Append("</tr>");
}
sb.Append("</table>");
return sb.ToString();
}
#endregion
}
}
@@ -95,6 +95,51 @@ namespace FineUIPro.Web.HJGL.DataIn
/// </remarks>
protected global::FineUIPro.ContentPanel contentPanel1;
/// <summary>
/// TabStrip1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TabStrip TabStrip1;
/// <summary>
/// RegionPanel1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.RegionPanel RegionPanel1;
/// <summary>
/// Toolbar2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar2;
/// <summary>
/// btnOut1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnOut1;
/// <summary>
/// Region2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Region Region2;
/// <summary>
/// Grid1 控件。
/// </summary>
@@ -104,6 +149,96 @@ namespace FineUIPro.Web.HJGL.DataIn
/// </remarks>
protected global::FineUIPro.Grid Grid1;
/// <summary>
/// RegionPanel2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.RegionPanel RegionPanel2;
/// <summary>
/// Toolbar3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar3;
/// <summary>
/// btnOut2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnOut2;
/// <summary>
/// Region3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Region Region3;
/// <summary>
/// Grid2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid Grid2;
/// <summary>
/// RegionPanel3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.RegionPanel RegionPanel3;
/// <summary>
/// Toolbar4 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar4;
/// <summary>
/// btnOut3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnOut3;
/// <summary>
/// Region4 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Region Region4;
/// <summary>
/// Grid3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid Grid3;
/// <summary>
/// Window1 控件。
/// </summary>