【问题标题】:How to hide part of the datatable under some condition?如何在某些情况下隐藏部分数据表?
【发布时间】:2015-01-10 07:43:02
【问题描述】:

如何通过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

【问题讨论】:

  • 一个DataTable 包含数据,你不能“隐藏”它,你可以从表中删除它。当然,您可以在显示它的任何位置隐藏它(f.e 在DataGridView 中)。
  • @TimSchmelter:hmmm,好的,如何删除部分而不是整行(我的意思是 cells

标签: c# asp.net linq datatable


【解决方案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】:

    您也可以直接在您的 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")
                                };
    

    【讨论】:

      【解决方案3】:

      正如评论,DataTable 包含 数据,你不能“隐藏”它,你可以从表中删除它。当然,您可以隐藏它,无论您在哪里显示它(f.e 在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>());
          }
      }
      

      【讨论】:

      • row.SetField("value", new Nullable&lt;int&gt;());row.SetField("dep", new Nullable&lt;int&gt;()); 对吗?
      • 如何用空值设置字符串,我尝试用string.Empty设置它但仍然有旧值!!
      • @just_name:它是什么类型,intstring?但是,我上面显示的方式适用于int-columns,我已经对其进行了测试。如果它是一个字符串,您可以分配DBNull.Value 或(如果需要)String.Empty,例如:row.SetField("value", DBNull.Value);
      • 谢谢你,我解决了我的问题:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多