如何在某些条件下隐藏部分数据?

时间:2014-11-13 08:18:50

标签: c# asp.net linq datatable

如何通过LINQ在某些条件下隐藏部分数据表?

如果我有这样的数据表

id   name   flag   value   dep   hours

1    aa      0       20     3      22

2    bb      1       35     47     5

3    cc      2       77     23     7

4    aaa     0       13     98     19

5    bbb     1       67     3201   2

6    ccc     2       66     452    4

现在我希望flag = 2隐藏部分数据表,如下所示:

id   name   flag   value   dep   hours

1    aa      0       20     3      22

2    bb      1       35     47     5

3    cc      2                     7

4    aaa     0       13     98     19

5    bbb     1       67     3201   2

6    ccc     2                     4

3 个答案:

答案 0 :(得分:3)

如评论所述,DataTable包含数据,您无法隐藏"它,你可以从表中删除它。当然,无论你在哪里显示它都可以隐藏(f.e in DataGridView)。

你:

  嗯,好吧如何删除部分不是整行,我的意思是细胞?

foreach(DataRow row in table.Rows)
{
    int flag = row.Field<int>("flag");
    if(flag == 2)
    {
        row.SetField("value", new Nullable<int>());
        row.SetField("dep",   new Nullable<int>());
    }
}

答案 1 :(得分:1)

您可以在LINQ查询中检索数据时使用三元运算符::

var data=(from table_name in DataContextName.Table_Name
            select new
            {
                id=table_name.id,
                name=table_name.name,
                flag=table_name.flag,
                value=(table_name.flag==2? "" : table_name.value),
                dep=(table_name.flag==2? "" : table_name.dep),
                hours=table_name.hours
        }).ToList();

答案 2 :(得分:0)

您也可以直接在linq上实现它。请参阅下面的示例。

            DataTable dt = new DataTable();
            dt.Columns.Add("flag");
            dt.Columns.Add("value");
            dt.Columns.Add("dep");


            dt.Rows.Add("0", "20", "3");
            dt.Rows.Add("1", "35", "47");
            dt.Rows.Add("2", "77", "23");


            var myResults = from o in dt.AsEnumerable()
                            select new
                            {
                                flag = o.Field<string>("flag"),
                                value = (o.Field<string>("flag") == "1") ? string.Empty : o.Field<string>("value"),
                                dep = (o.Field<string>("flag") == "1") ? string.Empty : o.Field<string>("dep")
                            };