如何动态隐藏gridview asp.net中的空列

时间:2015-02-05 13:48:03

标签: asp.net linq gridview

我正在使用linq查询为gridview提供以下内容:

var query = (from p in db.Mytable Where                   
p.Circuit_Type.Equals(drpCircuitType.SelectedItem)
&& p.Voltage >= double.Parse(Voltage)
&& p.HP >= double.Parse(HP) 
select new
    {
        p.Circuit_Type,
        p.Device1_Part_Number,
        p.Device1_Description,
        p.Device2_Part_Number,
        p.Device2_Description,
        p.Device3_Part_Number,
        p.Device4_Part_Number,
        p.Device4_Description,
        p.Min_Encl_Volume,
        p.Conditions_of_Acceptability,
        p.SCCR,
        p.Voltage_CombinationSCCR,
        p.U_Reference,
        p.Combination_Reference

    });
GridTest.DataSource = query;
GridTest.DataBind();

到目前为止这是有效的。

所以我想要的是如果那些字段是空的而不是在gridview中显示该列(自动隐藏它)

4 个答案:

答案 0 :(得分:0)

您需要找到空单元格并隐藏列。这是一种扩展方法。

public static class Extensions
    {
        public static DataGridView RemoveEmptyColumns(this DataGridView grdView)
        {
            foreach (DataGridViewColumn clm in grdView.Columns)
            {
                bool isEmpty = true;

                foreach (DataGridViewRow row in grdView.Rows)
                {
                    if (! string.IsNullOrEmpty(row.Cells[clm.Index].Value.ToString()))
                    {
                        isEmpty = false;
                        break;
                    }                   
                }
                    grdView.Columns[clm.Index].Visible = isEmpty;
            }

            return grdView;
        }
    }

你可以通过

来调用它
GridTest.RemoveEmptyColumns();

HTH

答案 1 :(得分:0)

这取决于。对于所有行,(A)的空字段是空的,还是(B)仅对于某些行。

此外,在GridView中,您使用的是自动生成的列还是手动指定了它们?

为了使其正常工作,它必须是方案A,然后您可以使用RowCreated事件来搜索和隐藏没有数据要显示的列。

答案 2 :(得分:0)

使用网格的RowDataBound事件。抓住记录并检查,如果你不想显示那么使用

e.Row.Cells[index].Visible = false;

其中index是列索引。

答案 3 :(得分:0)

好的,假设结果数据集将返回所有项目缺失值完全相同的字段,并且所述数据集绑定到带有自动生成列的网格视图,标题行然后以下工作(至少在我的计算机上) )

protected void gvproducts_DataBound(object sender, EventArgs e)
{
    GridView gv = (GridView)sender;

    // iterate through the gridview's rows and hide emty cells.
    for (int r = 0; r < gv.Rows.Count; r++)
    {            
        // only interested in data rows
        if (gv.Rows[r].RowType == DataControlRowType.DataRow)
        {
            // iterate through cells
            for (int c = 0; c < gv.Rows[r].Cells.Count; c++)
            {
                // check text content of cell
                if (string.IsNullOrEmpty(Server.HtmlDecode(gv.Rows[r].Cells[c].Text).Trim()))
                {
                    // hide cell
                    gv.Rows[r].Cells[c].Visible = false;

                    // also hide header row's corresponding cell
                    gv.HeaderRow.Cells[c].Visible = false;
                }
            }
        }
    }       
}

如果上述假设不成立,那么您将看到一个非常奇怪的DataGrid。

你知道他们对假设的看法......