如何在DataTables中获取指定Level1对应的Level2红色Cantidad单元格?
解决方案
嘿,作为DataTables新手,你的需求其实不难实现,我来给你捋清楚两种常用方法,你可以根据自己的场景来选~
先明确一个前提
首先要注意:不管是后端的System.Data.DataTable还是前端的DataTables插件,本身都不会直接存储单元格的颜色样式。所以你需要有个方式标记哪些Cantidad单元格是红色的——比如后端可以加个额外字段(比如CantidadIsRed布尔列),前端可以给红色单元格加专属的CSS类(比如red-cell)。
方法一:用Select方法(后端.NET DataTable场景)
如果你用的是后端的System.Data.DataTable,Select方法是更简洁高效的选择,适合条件明确的情况。
假设你的DataTable有这些列:Level(存储Level 1/2)、Cantidad(目标列)、CantidadIsRed(标记是否为红色的布尔列),代码可以这么写:
// 一步筛选出Level为2且Cantidad标记为红色的行 DataRow[] targetRows = yourDataTable.Select("Level = 'Level 2' AND CantidadIsRed = True"); // 提取这些行的Cantidad值 List<object> redCantidadValues = new List<object>(); foreach (DataRow row in targetRows) { redCantidadValues.Add(row["Cantidad"]); }
Select方法通过筛选字符串直接定位目标行,比手动循环少写不少代码,而且底层优化过,性能也不错。
方法二:循环遍历(通用场景)
如果你的筛选逻辑比较复杂(比如需要额外判断其他条件),或者你不想用筛选字符串,循环遍历也是完全可行的,新手也更容易理解:
List<object> redCantidadValues = new List<object>(); foreach (DataRow row in yourDataTable.Rows) { // 先判断是否是Level 2,再判断Cantidad是否标记为红色 if (row["Level"].ToString() == "Level 2" && (bool)row["CantidadIsRed"]) { redCantidadValues.Add(row["Cantidad"]); } }
这种方式更灵活,适合需要在遍历中做额外处理的场景。
如果是前端DataTables插件的情况
如果你说的是前端的DataTables表格插件,那得用它的API来筛选红色单元格:
假设你给红色的Cantidad单元格加了red-cell的CSS类,代码可以这么写:
// 假设你的DataTables实例是dt var dt = $('#yourTable').DataTable(); // 筛选出Level为2且Cantidad单元格带red-cell类的单元格 var redCantidadCells = dt.cells(function (idx, data, node) { // 获取当前行的Level列值 var levelValue = dt.cell(idx, dt.column('Level:name').index()).data(); // 判断条件:Level是Level 2,且当前单元格是Cantidad列且带red-cell类 return levelValue === 'Level 2' && $(node).hasClass('red-cell'); }, 'Cantidad:name').nodes(); // 提取这些单元格的文本值 var redCantidadValues = []; $(redCantidadCells).each(function() { redCantidadValues.push($(this).text()); });
总结
- 后端DataTable:优先用
Select方法,简洁高效;复杂逻辑选循环。 - 前端DataTables插件:用它的
cells()API结合自定义判断来筛选。
内容的提问来源于stack exchange,提问作者GetData
相关产品推荐
相关产品推荐

