<c:forEach> 和 datatable

本文介绍了JSP中的<c:forEach>标签的使用方法,包括其属性如var、items、varStatus、begin、end和step等,并展示了如何在循环中输出内容。同时,文章还探讨了PrimeFaces的DataTable组件,提到了rowIndexVar和rows属性,以及与<c:forEach>标签的不同之处。通过实例展示了如何在DataTable中使用这些属性来呈现数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<c:forEach> 和 datatable

  1. forEach

如何使用以及各种属性的介绍
repeat也差不多
<c:forEach var=“每个变量名字”
items=“要迭代的list”
varStatus=“每个对象的状态”(如果要获取当前循环的index,可以用varSatus.index获得,且从0开始)
begin=“循环从哪儿开始”
end=“循环到哪儿结束”
step="循环的步长>
循环要输出的东西</c:forEach>

<c:forEach items="#{bean.items}" var="item" varStatus="loop">
    <c:if test="#{loop.first}">First</c:if>
    <h:outputText value="#{item}" />
    <c:if test="#{loop.last}">Last</c:if>
</c:forEach>
  1. datatable
    官网文档:https://www.primefaces.org/docs/vdl/4.0/primefaces-p/dataTable.html
    使用方法大致和上面的差不多,但是有一些区别
    rowIndexVar:Name of iterator to refer each row index;记录循环次数的名字,从0开始,这个是String类型;也可以用binding实现,比如这里的:#{test.rowIndex} ;
    rows: Number of rows to display per page. Default value is 0 meaning to display all data available. 这个是Integer类型
<p:dataTable id="test" binding="#{test}" rowIndexVar="rowIndex" 
value="#{javaBean.testList}" var="item">
<p:column>...</p:column>
<p:row>...</p:row>
...
</p:dataTable>
<GroupBox Header="{StaticResource ResourceKey=jkoEquipmentLoading_waitingReworkData}" Grid.Row="5"> <DataGrid x:Name="dgWaitingReworkData" IsReadOnly="True" VirtualizingPanel.IsVirtualizing="False" AutoGenerateColumns="False"> <DataGrid.ColumnHeaderStyle> <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="BorderThickness"> <Setter.Value> <Thickness Left="1" Top="1" Right="1" Bottom="1"/> </Setter.Value> </Setter> <Setter Property="Foreground" Value="Black"/> <Setter Property="FontSize" Value="12" /> <Setter Property="Height" Value="30"/> <Setter Property="HorizontalContentAlignment" Value="Center" /> </Style> </DataGrid.ColumnHeaderStyle> <DataGrid.ContextMenu> <ContextMenu x:Name="dgmenu1" StaysOpen="true"> <MenuItem Header="{StaticResource jkoScrapQuery_Excel}"/> </ContextMenu> </DataGrid.ContextMenu> <DataGrid.Columns> <DataGridCheckBoxColumn Width="30" Binding="{Binding IsCheck,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <DataGridCheckBoxColumn.HeaderTemplate > <DataTemplate> <CheckBox Click="CheckBox_Click" HorizontalAlignment="Center" VerticalAlignment="Center" ></CheckBox> <!--IsChecked="True"--> </DataTemplate> </DataGridCheckBoxColumn.HeaderTemplate> <DataGridCheckBoxColumn.ElementStyle> <Style TargetType="CheckBox"> <Setter Property="IsChecked" Value="{Binding IsCheck,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></Setter> </Style> </DataGridCheckBoxColumn.ElementStyle> <DataGridCheckBoxColumn.CellStyle> <Style > <Setter Property="CheckBox.VerticalAlignment" Value="Center"></Setter> <Setter Property="CheckBox.HorizontalAlignment" Value="Center"></Setter> </Style> </DataGridCheckBoxColumn.CellStyle> </DataGridCheckBoxColumn> <DataGridTextColumn x:Name="gvSerialNumber" Header="{StaticResource ResourceKey=jkoEquipmentLoading_serialNumber}" Width="50" Binding="{Binding SerialNumber}" /> <DataGridTextColumn x:Name="gvSn" Header="{StaticResource ResourceKey=jkoEquipmentLoading_sn}" Width="200" Binding="{Binding Sn}" /> <DataGridTextColumn x:Name="gvTrayNo" Header="{StaticResource ResourceKey=jkoEquipmentLoading_trayNo}" Width="100" Binding="{Binding TrayNo}" /> <DataGridTextColumn x:Name="gvOldGrade" Header="{StaticResource ResourceKey=jkoEquipmentLoading_oldGrade}" Width="100" Binding="{Binding Grade}"/> <DataGridTextColumn x:Name="gvOldOrder" Header="{StaticResource ResourceKey=jkoEquipmentLoading_oldOrder}" Width="100" Binding="{Binding OldOrder}"/> <DataGridTextColumn x:Name="gvOldProduct" Header="{StaticResource ResourceKey=jkoEquipmentLoading_oldProduct}" Width="100" Binding="{Binding OldProduct}"/> <DataGridTextColumn x:Name="gvNewGrade" Header="{StaticResource ResourceKey=jkoEquipmentLoading_newGrade}" Width="100" Binding="{Binding NewGrade}"> <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Background" Value="LightGreen"></Setter> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn> <DataGridTextColumn x:Name="gvNewOrder" Header="{StaticResource ResourceKey=jkoEquipmentLoading_newOrder}" Width="100" Binding="{Binding NewOrder}" > <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Background" Value="LightGreen"></Setter> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn> <DataGridTextColumn x:Name="gvNewProduct" Header="{StaticResource ResourceKey=jkoEquipmentLoading_newProduct}" Width="100" Binding="{Binding NewProduct}"> <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Background" Value="LightGreen"></Setter> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn> <DataGridTextColumn x:Name="gvPowerGear" Header="{StaticResource ResourceKey=jkoEquipmentLoading_powerGear}" Width="100" Binding="{Binding PowerGear}"/> <DataGridTextColumn x:Name="gvColor" Header="{StaticResource ResourceKey=jkoEquipmentLoading_color}" Width="100" Binding="{Binding Color}"/> <DataGridTextColumn x:Name="gvShortCircuitCurrent" Header="{StaticResource ResourceKey=jkoEquipmentLoading_shortCircuitCurrent}" Width="100" Binding="{Binding ShortCircuitCurrent}"/> <DataGridTextColumn x:Name="gvOpenCircuitVoltage" Header="{StaticResource ResourceKey=jkoEquipmentLoading_openCircuitVoltage}" Width="100" Binding="{Binding OpenCircuitVoltage}"/> <DataGridTextColumn x:Name="gvWorkingCurrent" Header="{StaticResource ResourceKey=jkoEquipmentLoading_workingCurrent}" Width="100" Binding="{Binding WorkingCurrent}"/> <DataGridTextColumn x:Name="gvWorkingVoltage" Header="{StaticResource ResourceKey=jkoEquipmentLoading_workingVoltage}" Width="100" Binding="{Binding WorkingVoltage}"/> <DataGridTextColumn x:Name="gvMeasuredPower" Header="{StaticResource ResourceKey=jkoEquipmentLoading_measuredPower}" Width="70" Binding="{Binding MeasuredPower}" /> <!--<DataGridTemplateColumn Header="操作" Width="70"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="删除" Click="Button_Click"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>--> </DataGrid.Columns> </DataGrid> </GroupBox> 用代码获取到dgWaitingReworkData里面的jkoEquipmentLoading_oldOrder原工单 里面只要不重复的数据
05-13
<?xml version="1.0" encoding="utf-8" ?> <Information> <!-- 哑铃型连杆1 弯头型2 平头型3 弯头无箱型4 --> <LinkageType> 1 </LinkageType> <PLMID>Linkage_PLID_001</PLMID> <Parts> <Part> <PLMID>Part_PLID_001</PLMID> <!-- 左加强板1 右加强板2 盖板3 底板4 --> <Type>1</Type> <Points> <Point id="1"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P1</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>40,-1140,195.8</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>40,-1101,195.8</EndPoint> <!-- 焊角工艺标识,双方约定的标识符,如L8、V20,代号与郑煤机焊接工艺表一致 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="2"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P2</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>40,-1140,-193.2</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>40,-1098,-19.61</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="3"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P3</Position> <!-- 直线段1 圆弧2 --> <LineType>2</LineType> <!-- 起点 --> <StartPoint>40,-668.5,57.27</StartPoint> <!-- 中间点 --> <MiddlePoint>-675.3,0,40</MiddlePoint> <!-- 终点 --> <EndPoint>40,-668.5,-56.82</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="4"> <!-- 点固1 预埋2 --> <Function>2</Function> <!-- 位置?根据点位确定姿态 --> <Position>P456</Position> <!-- 直线段1 圆弧2 --> <LineType>2</LineType> <!-- 起点 --> <StartPoint>40,-641.6,111.9</StartPoint> <!-- 中间点 --> <MiddlePoint>40,-675.9,0</MiddlePoint> <!-- 终点 --> <EndPoint>40,-642.2,110.8</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> </Points> </Part> <Part> <PLMID>Part_PLID_002</PLMID> <!-- 左加强板1 右加强板2 盖板3 底板4 --> <Type>2</Type> <Points> <Point id="1"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P1</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>40,1097,196.8</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>40,1140,196.8</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="2"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P2</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>40,1139,-195.4</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>40,1097,-195.4</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="3"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P3</Position> <!-- 直线段1 圆弧2 --> <LineType>2</LineType> <!-- 起点 --> <StartPoint>40,667,56.35</StartPoint> <!-- 中间点 --> <MiddlePoint>40,675,0</MiddlePoint> <!-- 终点 --> <EndPoint>40,667.9,-54.94</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="4"> <!-- 点固1 预埋2 --> <Function>2</Function> <!-- 位置?根据点位确定姿态 --> <Position>P456</Position> <!-- 直线段1 圆弧2 --> <LineType>2</LineType> <!-- 起点 --> <StartPoint>40,640.5,112</StartPoint> <!-- 中间点 --> <MiddlePoint>40,675,0</MiddlePoint> <!-- 终点 --> <EndPoint>40,640.5,-112.4</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> </Points> </Part> <Part> <PLMID>Part_PLID_003</PLMID> <!-- 左加强板1 右加强板2 盖板3 底板4 --> <Type>3</Type> <Points> <Point id="1"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P1</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>90,-1194,148.6</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>90,-1144,178.6</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="2"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P2</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>40,-633.8,146.3</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>40,-583.8,146.3</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="3"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P3</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>40,583.1,146.5</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>40,633.1,146.5</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="4"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P4</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>90,1144,178.6</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>90,1194,148.6</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="5"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P5</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>305.2,-1194,148.6</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>305.2,-1144,178.6</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="6"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P6</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>355.2,-633.8,146.3</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>355.2,-583.8,146.3</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="7"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P7</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>355.2,583.1,146.5</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>355.2,633.1,146.5</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="8"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P8</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>305.2,1144,178.6</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>305.2,1194,148.6</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> </Points> </Part> <Part> <PLMID>Part_PLID_004</PLMID> <!-- 左加强板1 右加强板2 盖板3 底板4 --> <Type>4</Type> <Points> <Point id="1"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P1</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>90,-1194,-148.6</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>90,-1144,-178.6</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="2"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P2</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>40,-633.8,-146.3</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>40,-583.8,-146.3</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="3"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P3</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>40,583.1,-146.5</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>40,633.1,-146.5</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="4"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P4</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>90,1144,-178.6</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>90,1194,-148.6</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="5"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P5</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>305.2,-1194,-148.6</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>305.2,-1144,-178.6</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="6"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P6</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>355.2,-633.8,-146.3</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>355.2,-583.8,-146.3</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="7"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P7</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>355.2,583.1,-146.5</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>355.2,633.1,-146.5</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> <Point id="8"> <!-- 点固1 预埋2 --> <Function>1</Function> <!-- 位置?根据点位确定姿态 --> <Position>P8</Position> <!-- 直线段1 圆弧2 --> <LineType>1</LineType> <!-- 起点 --> <StartPoint>305.2,1144,-178.6</StartPoint> <!-- 中间点 --> <MiddlePoint></MiddlePoint> <!-- 终点 --> <EndPoint>305.2,1194,-148.6</EndPoint> <!-- 焊角工艺标识,双方约定的标识符 --> <WeldingMark>V20</WeldingMark> </Point> </Points> </Part> </Parts> </Information> 参考文件
最新发布
08-06
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> <header th:replace="header::html"></header> <style> #dataTable, #dataTable th, #dataTable td { border: 2px solid #3498db; border-collapse: collapse; padding: 12px 15px; } #dataTable th { background-color: #ecf0f1; border-bottom: 3px solid #2980b9; } .delete-row { background-color: #e74c3c; color: white; border: none; padding: 5px 10px; cursor: pointer; } .container { margin: 20px auto; width: 90%; } input { padding: 8px; margin: 0 10px 15px 0; border: 1px solid #ddd; } #submitBtn { margin-top: 20px; padding: 10px 20px; background-color: #2ecc71; color: white; border: none; cursor: pointer; } </style> </head> <body> <div class="container"> <input type="text" id="input1" placeholder="输入字段1"> <input type="text" id="input2" placeholder="输入字段2"> <input type="text" id="input3" placeholder="输入搜索内容"> <table id="dataTable"> <thead> <tr> <th>uuid</th> <th>型号</th> <th>类型</th> <th>编号</th> <th>操作</th> </tr> </thead> <tbody id="tableBody"></tbody> </table> <button id="submitBtn">提交数据</button> </div> <script> layui.use(['form', 'upload','jquery'],function(){ let $ = layui.jquery; $(document).ready(function() { const tableData = []; // ID映射表用于去重 const idMap = new Map(); $('#input3').on('input', function() { clearTimeout(this.timer); const searchTerm = $(this).val().trim(); if(searchTerm) { this.timer = setTimeout(() => fetchTableData(searchTerm), 500); } }); function fetchTableData(search) { $.get(`/api/model/getModelInfo?modelUuid=${search}`, function(response) { const newData = response.data || []; // 去重处理 newData.forEach(item => { if(!idMap.has(item.model_uuid)) { idMap.set(item.model_uuid, true); tableData.push(item); } }); renderTable(); $('#input3').val('').focus(); }); } function renderTable() { $('#tableBody').empty(); tableData.forEach(item => { $('#tableBody').append(` <tr> <td>${item.model_uuid}</td> <td>${item.model_mold}</td> <td>${item.model_type}</td> <td>${item.model_id}</td> <td> <button class="delete-row" data-id="${item.model_uuid}">删除</button> </td> </tr> `); }); } $(document).on('click', '.delete-row', function() { const id = $(this).data('id'); const index = tableData.findIndex(item => item.model_uuid === id); if(index !== -1) { idMap.delete(id); tableData.splice(index, 1); renderTable(); } }); $('#submitBtn').click(function() { const payload = { field1: $('#input1').val(), field2: $('#input2').val(), tableData: tableData }; $.ajax({ url: '/api/input', type: 'POST', contentType: 'application/json', data: JSON.stringify(payload), success: () => alert('提交成功!') }); }); }); }); </script> </body> </html>根据这段代码,做一次优化,优化1:新增一个按钮,按钮为重置按钮,当按下重置按钮时,清空输入框表格的数据;优化2:做数据校验,当input1,input2,dataTable,其中有一个或者多个没有数据时,不能成功提交,并且用弹窗是哪个没有数据。不用给出思考过程,直接给我完整的代码
06-13
private void ChartDt() { GetPreviousDate getPreviousDate = new GetPreviousDate(); List<string> PreviousFridayList = new List<string>(); List<string> FriNextThursdayList = new List<string>(); List<string> MonthStartList = new List<string>(); List<string> MonthEndList = new List<string>(); // 近三月三周始末日期 for (int i = 1; i <= 3; i++) { PreviousFridayList.Add(getPreviousDate.GetPreviousFriday(i).ToString("yyyyMMdd")); FriNextThursdayList.Add(getPreviousDate.GetFriNextThursday(i).ToString("yyyyMMdd")); MonthStartList.Add(getPreviousDate.GetMonthStart(i).ToString("yyyyMMdd")); MonthEndList.Add(getPreviousDate.GetMonthStart(i - 1).ToString("yyyyMMdd"));// 次月月初 } // FriNextThursdayList 处理日期 +1天 List<string> AddFriNextThursdayList = FriNextThursdayList.Select(s => { DateTime date; if (DateTime.TryParseExact(s, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) { return date.AddDays(1).ToString("yyyyMMdd"); // 加1天并格式化 } else { return s; // 无效日期时返回原字符串(可选:可抛出异常或返回null) } }).ToList(); // 近七天日期 IEnumerable<DateTime> last7Days = getPreviousDate.GetLast7Days(baseDate); List<string> PreviousDayList = new List<string>(); foreach (var day in last7Days) { PreviousDayList.Add(day.ToString("yyyyMMdd")); } // 近七天日期 IEnumerable<DateTime> last7Days_ = getPreviousDate.GetLast7Days_(baseDate); List<string> PreviousDayList_ = new List<string>(); foreach (var day in last7Days_) { PreviousDayList_.Add(day.ToString("yyyyMMdd")); } #region // 周 dt List<string> WeekSqlList = new List<string>(); List<DataTable> WeekDetailsDtList = new List<DataTable>(); List<DataTable> WeekRatioDtList = new List<DataTable>(); for (int i = 0; i < 3; i++) { string sql = string.Format(@" SELECT lotid, stage, equipmentname, trackoutqty, trackintime, trackouttime, SubStr(PROCESS,2,5) tech FROM SDB_TB_WIP_TITO_HIST WHERE 1=1 AND lottype NOT IN ('C','D','V','Z','Y','L','T','X') AND equipmentname = '{0}' AND trackintime >= '{1} 073000000' AND trackintime <= '{2} 073000000' ORDER BY trackintime ", EqpSelection.Text, PreviousFridayList[i], AddFriNextThursdayList[i]); WeekSqlList.Add(sql); DataTable dt = ws.GetDataTable(Mainfrom.dataSoure, WeekSqlList[i]); WeekDetailsDtList.Add(dt); WeekRatioDtList.Add(EachDtProcess(WeekDetailsDtList[i])); } // 天 dt List<string> DaySqlList = new List<string>(); List<DataTable> DayDetailsDtList = new List<DataTable>(); List<DataTable> DayRatioDtList = new List<DataTable>(); for (int i = 0; i < 7; i++) { string sql = string.Format(@" SELECT lotid, stage, equipmentname, trackoutqty, trackintime, trackouttime, SubStr(PROCESS,2,5) tech FROM SDB_TB_WIP_TITO_HIST WHERE 1=1 AND lottype NOT IN ('C','D','V','Z','Y','L','T','X') AND equipmentname = '{0}' AND trackintime >= '{1} 073000000' AND trackintime <= '{2} 073000000' ORDER BY trackintime ", EqpSelection.Text, PreviousDayList[i], PreviousDayList_[i]); DaySqlList.Add(sql); DataTable dt = ws.GetDataTable(Mainfrom.dataSoure, DaySqlList[i]); DayDetailsDtList.Add(dt); DayRatioDtList.Add(EachDtProcess(DayDetailsDtList[i])); } // 月 dt List<string> MonthSqlList = new List<string>(); List<DataTable> MonthDetailsDtList = new List<DataTable>(); List<DataTable> MonthRatioDtList = new List<DataTable>(); for (int i = 0; i < 3; i++) { string sql = string.Format(@" SELECT lotid, stage, equipmentname, trackoutqty, trackintime, trackouttime, SubStr(PROCESS,2,5) tech FROM SDB_TB_WIP_TITO_HIST WHERE 1=1 AND lottype NOT IN ('C','D','V','Z','Y','L','T','X') AND equipmentname = '{0}' AND trackintime >= '{1} 073000000' AND trackintime <= '{2} 073000000' ORDER BY trackintime ", EqpSelection.Text, MonthStartList[i], MonthEndList[i]); MonthSqlList.Add(sql); DataTable dt = ws.GetDataTable(Mainfrom.dataSoure, MonthSqlList[i]); MonthDetailsDtList.Add(dt); MonthRatioDtList.Add(EachDtProcess(MonthDetailsDtList[i])); } //List<List<int>> CountList = new List<List<int>>(); //List<int> tempList = new List<int>(); //for (int i = 0; i < MdtRatioList.Count; i++ ) //{ // tempList.Clear(); // foreach (DataRow row in MdtRatioList[i].Rows) // { // int num = row.Field<int>("Count"); // tempList.Add(num); // } // CountList.Add(tempList); //} // // 单机台周平均 // // 遍历 周 Ratio dt Count列 List<List<object>> WeekCountList = new List<List<object>>(); foreach (DataTable dt in WeekRatioDtList) { // 验证列存在性 if (!dt.Columns.Contains("Count")) continue; // 创建当前表的存储列表 List<object> currentTableData = new List<object>(); // 遍历行并提取数据 foreach (DataRow row in dt.Rows) { object value = row["Count"]; currentTableData.Add(value == DBNull.Value ? null : value); } WeekCountList.Add(currentTableData); } // 合并123批 List<List<int>> WeekMergeList = new List<List<int>>(); foreach (List<object> subList in WeekCountList) { List<int> processed = new List<int>(); // 计算前三个有效数字的(自动跳过null值) int sum = subList.Take(3) .Where(x => x != null) .Sum(x => Convert.ToInt32(x)); processed.Add(sum); // 添加后续元素(自动转换并跳过null) processed.AddRange(subList.Skip(3) .Where(x => x != null) .Select(x => Convert.ToInt32(x))); WeekMergeList.Add(processed); } List<List<double>> WeekRatioList = new List<List<double>>(); foreach (List<int> subList in WeekMergeList) { // 提取合格数不合格数 int qualified = subList[0]; int unqualified = subList[1]; // 计算总数(带防零处理) int total = qualified + unqualified; if (total == 0) { WeekRatioList.Add(new List<double> { 0.0, 0.0 }); continue; } // 计算比率(保留两位小数) double qualifiedRate = Math.Round(qualified * 1.00 / total, 2); double unqualifiedRate = Math.Round(unqualified * 1.00 / total, 2); // 比率平衡处理(确保总为100%) if (qualifiedRate + unqualifiedRate != 1.00) { qualifiedRate = 1.00 - unqualifiedRate; } WeekRatioList.Add(new List<double> { qualifiedRate, unqualifiedRate }); } #endregion // 今天的 ISO周 string TODAY = CustomWeekFormatter.GetCustomWeek(baseDate); // 前周五的 ISO周 List<string> preFriWeek = new List<string>(); foreach (string weekdate in PreviousFridayList) { preFriWeek.Add(CustomWeekFormatter.ConvertYyyyMmDdToWeek(weekdate)); } // 前周五的下周四 ISO周 List<string> preNextThuWeek = new List<string>(); foreach (string weekdate in FriNextThursdayList) { preNextThuWeek.Add(CustomWeekFormatter.ConvertYyyyMmDdToWeek(weekdate)); } // 合成新 DT表 DataTable WeekRatioOverviewTable = new DataTable("QualityStats"); WeekRatioOverviewTable.Columns.Add("Date", typeof(string)); WeekRatioOverviewTable.Columns.Add("Qualified", typeof(int)); WeekRatioOverviewTable.Columns.Add("Unqualified", typeof(int)); WeekRatioOverviewTable.Columns.Add("PassRate", typeof(double)); WeekRatioOverviewTable.Columns.Add("FailureRate", typeof(double)); // 检查列表长度是否一致 if (preFriWeek.Count != WeekMergeList.Count || WeekMergeList.Count != WeekRatioList.Count) { throw new ArgumentException("所有列表长度必须相同"); } // 合并数据到DataTable for (int i = 0; i < preFriWeek.Count; i++) { DataRow newRow = WeekRatioOverviewTable.NewRow(); newRow["Date"] = preFriWeek[i]; newRow["Qualified"] = WeekMergeList[i][0]; // 合格数 newRow["Unqualified"] = WeekMergeList[i][1]; // 不合格数 newRow["PassRate"] = WeekRatioList[i][0]; // 合格率 newRow["FailureRate"] = WeekRatioList[i][1]; // 不合格率 WeekRatioOverviewTable.Rows.Add(newRow); } //// 周绑定数据 //chartControl2.DataSource = WeekRatioOverviewTable; //chartControl2.Series[0].ArgumentDataMember = "Date"; //chartControl2.Series[0].ValueDataMembers[0] = "Qualified"; //chartControl2.Series[1].ArgumentDataMember = "Date"; //chartControl2.Series[1].ValueDataMembers[0] = "UnQualified"; //chartControl2.Series[2].ArgumentDataMember = "Date"; //chartControl2.Series[2].ValueDataMembers[0] = "PassRate"; //chartControl2.Series[3].ArgumentDataMember = "Date"; //chartControl2.Series[3].ValueDataMembers[0] = "FailureRate"; // // 单机台月平均 // // 遍历 周 Ratio dt Count列 List<List<object>> MonthCountList = new List<List<object>>(); foreach (DataTable dt in MonthRatioDtList) { // 验证列存在性 if (!dt.Columns.Contains("Count")) continue; // 创建当前表的存储列表 List<object> currentTableData = new List<object>(); // 遍历行并提取数据 foreach (DataRow row in dt.Rows) { object value = row["Count"]; currentTableData.Add(value == DBNull.Value ? null : value); } MonthCountList.Add(currentTableData); } // 合并123批 List<List<int>> MonthMergeList = new List<List<int>>(); foreach (List<object> subList in MonthCountList) { List<int> processed = new List<int>(); // 计算前三个有效数字的(自动跳过null值) int sum = subList.Take(3) .Where(x => x != null) .Sum(x => Convert.ToInt32(x)); processed.Add(sum); // 添加后续元素(自动转换并跳过null) processed.AddRange(subList.Skip(3) .Where(x => x != null) .Select(x => Convert.ToInt32(x))); MonthMergeList.Add(processed); } List<List<double>> MonthRatioList = new List<List<double>>(); foreach (List<int> subList in MonthMergeList) { // 提取合格数不合格数 int qualified = subList[0]; int unqualified = subList[1]; // 计算总数(带防零处理) int total = qualified + unqualified; if (total == 0) { MonthRatioList.Add(new List<double> { 0.0, 0.0 }); continue; } // 计算比率(保留两位小数) double qualifiedRate = Math.Round(qualified * 1.00 / total, 2); double unqualifiedRate = Math.Round(unqualified * 1.00 / total, 2); // 比率平衡处理(确保总为100%) if (qualifiedRate + unqualifiedRate != 1.00) { qualifiedRate = 1.00 - unqualifiedRate; } MonthRatioList.Add(new List<double> { qualifiedRate, unqualifiedRate }); } // 截取操作:从索引2开始取4位(yyMM) List<string> preMonth = MonthStartList .Select(s => s.Substring(2, 4)) .ToList(); // 合成新 DT表 DataTable MonthRatioOverviewTable = new DataTable("QualityStats"); MonthRatioOverviewTable.Columns.Add("Date", typeof(string)); MonthRatioOverviewTable.Columns.Add("Qualified", typeof(int)); MonthRatioOverviewTable.Columns.Add("Unqualified", typeof(int)); MonthRatioOverviewTable.Columns.Add("PassRate", typeof(double)); MonthRatioOverviewTable.Columns.Add("FailureRate", typeof(double)); // 检查列表长度是否一致 if (preMonth.Count != MonthMergeList.Count || MonthMergeList.Count != MonthRatioList.Count) { throw new ArgumentException("所有列表长度必须相同"); } // 合并数据到DataTable for (int i = 0; i < preMonth.Count; i++) { DataRow newRow = MonthRatioOverviewTable.NewRow(); newRow["Date"] = preMonth[i]; newRow["Qualified"] = MonthMergeList[i][0]; // 合格数 newRow["Unqualified"] = MonthMergeList[i][1]; // 不合格数 newRow["PassRate"] = MonthRatioList[i][0]; // 合格率 newRow["FailureRate"] = MonthRatioList[i][1]; // 不合格率 MonthRatioOverviewTable.Rows.Add(newRow); } // // // // 单机台天平均 // // 遍历 周 Ratio dt Count列 List<List<object>> DayCountList = new List<List<object>>(); foreach (DataTable dt in DayRatioDtList) { // 验证列存在性 if (!dt.Columns.Contains("Count")) continue; // 创建当前表的存储列表 List<object> currentTableData = new List<object>(); // 遍历行并提取数据 foreach (DataRow row in dt.Rows) { object value = row["Count"]; currentTableData.Add(value == DBNull.Value ? null : value); } DayCountList.Add(currentTableData); } // 合并123批 List<List<int>> DayMergeList = new List<List<int>>(); foreach (List<object> subList in DayCountList) { List<int> processed = new List<int>(); // 计算前三个有效数字的(自动跳过null值) int sum = subList.Take(3) .Where(x => x != null) .Sum(x => Convert.ToInt32(x)); processed.Add(sum); // 添加后续元素(自动转换并跳过null) processed.AddRange(subList.Skip(3) .Where(x => x != null) .Select(x => Convert.ToInt32(x))); DayMergeList.Add(processed); } List<List<double>> DayRatioList = new List<List<double>>(); foreach (List<int> subList in DayMergeList) { // 提取合格数不合格数 int qualified = subList[0]; int unqualified = subList[1]; // 计算总数(带防零处理) int total = qualified + unqualified; if (total == 0) { DayRatioList.Add(new List<double> { 0.0, 0.0 }); continue; } // 计算比率(保留两位小数) double qualifiedRate = Math.Round(qualified * 1.00 / total, 2); double unqualifiedRate = Math.Round(unqualified * 1.00 / total, 2); // 比率平衡处理(确保总为100%) if (qualifiedRate + unqualifiedRate != 1.00) { qualifiedRate = 1.00 - unqualifiedRate; } DayRatioList.Add(new List<double> { qualifiedRate, unqualifiedRate }); } // 截取操作:从索引2开始取4位(yyMM) List<string> preDay = PreviousDayList; //.Select(s => s.Substring(2, 4)) //.ToList(); // 合成新 DT表 DataTable DayRatioOverviewTable = new DataTable("QualityStats"); DayRatioOverviewTable.Columns.Add("Date", typeof(string)); DayRatioOverviewTable.Columns.Add("Qualified", typeof(int)); DayRatioOverviewTable.Columns.Add("Unqualified", typeof(int)); DayRatioOverviewTable.Columns.Add("PassRate", typeof(double)); DayRatioOverviewTable.Columns.Add("FailureRate", typeof(double)); // 检查列表长度是否一致 if (preDay.Count != DayMergeList.Count || DayMergeList.Count != DayRatioList.Count) { throw new ArgumentException("所有列表长度必须相同"); } // 合并数据到DataTable for (int i = 0; i < preDay.Count; i++) { DataRow newRow = DayRatioOverviewTable.NewRow(); newRow["Date"] = preDay[i]; newRow["Qualified"] = DayMergeList[i][0]; // 合格数 newRow["Unqualified"] = DayMergeList[i][1]; // 不合格数 newRow["PassRate"] = DayRatioList[i][0]; // 合格率 newRow["FailureRate"] = DayRatioList[i][1]; // 不合格率 DayRatioOverviewTable.Rows.Add(newRow); } // 合并 DataTable 并添加分隔符 DataTable mergedTable = MergeDataTablesWithSeparator(MonthRatioOverviewTable, WeekRatioOverviewTable, DayRatioOverviewTable); // 绑定数据 chartControl2.DataSource = mergedTable; chartControl2.Series[0].ArgumentDataMember = "Date"; chartControl2.Series[0].ValueDataMembers[0] = "Qualified"; chartControl2.Series[1].ArgumentDataMember = "Date"; chartControl2.Series[1].ValueDataMembers[0] = "UnQualified"; chartControl2.Series[2].ArgumentDataMember = "Date"; chartControl2.Series[2].ValueDataMembers[0] = "PassRate"; chartControl2.Series[3].ArgumentDataMember = "Date"; chartControl2.Series[3].ValueDataMembers[0] = "FailureRate"; } 优化这部分代码,减少行数提升可读性,并提高效率
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值