MVC C# - 带条件的DataRows中的DataTable

时间:2014-12-18 10:03:07

标签: c# asp.net-mvc-3 datatable

我有以下DataTable条记录: -

我想显示Rows列没有HeaderPrintOrder作为值的0。在PDF单元格中,我必须通过迭代到具有上述条件的记录来打印FieldNameAmount

我正在尝试下面的代码,给我错误Cannot interpret token '!'。这样做的正确方法是什么?

enter image description here

var datatable = new DataTable();
datatable.Load(reader);

DataRow[] HeadingFields = datatable.Select("HeaderPrintOrder != 0");
                    foreach (var item in HeadingFields)
                    {
                        cellHead = new PdfPCell(new Phrase(HeadingFields[item]["FieldName"].ToString() + " : " + HeadingFields[item]["Amount"].ToString(), fntTableFont));
                        cellHead.Colspan = 3;
                        MainTable.AddCell(cellHead);
                    }

3 个答案:

答案 0 :(得分:3)

使用LINQ很容易:

var filtered = datatable.AsEnumerable()
    .Where(row => row.Field<int>("HeaderPrintOrder") != 0);
foreach(DataRow row in filtered)
{
    //  ....
}

使用DataTable.Select,您必须使用<>代替!=

DataRow[] HeadingFields = datatable.Select("HeaderPrintOrder <> 0");
支持

<>,而!=则不支持。你可以在这里看到:

http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression%28v=vs.110%29.aspx

答案 1 :(得分:0)

尝试使用Linq:

var HeadingFields= from row in datatable .AsEnumerable()
                   where row.Field<int>("HeaderPrintOrder") <> (int)(0)
                   select row;

答案 2 :(得分:0)

RowFilter语法不支持!=运算符。

尝试:

DataRow[] HeadingFields = datatable.Select("NOT (HeaderPrintOrder = 0)");