使用List<>作为数据源的DataGridView如何隐藏列?

6

我有一个List<>,其中包含一个X类

X类有3个列:abc

现在,我将该列表绑定到DataGridView上:

dataGrid.DataSource = list;

如何在GridView中仅显示列a和c,隐藏列b?不编辑列表本身或生成新列表的情况下,有什么解决方案吗?
5个回答

10

我假设你的类是这样的:

private class MyClass
{
  [DisplayName("Foo/Bar")]
  public string FooBar { get; private set; }

  [Browsable(false)]
  public decimal Baz { get; private set; }

  [DisplayName("Baz")]
  public CurrencyBaz => string.Format(Baz, "C2");
}

以上代码中,GridView的列名如下:

  • 列名1:("Foo/Bar")
  • 列名2:"Baz"
  • 列名3:"CurrencyBaz"

如果您不想显示某一列,只需添加此属性:[Browsable(false)]

以上代码中,列名2没有被显示......

希望这能对您有所帮助...


太棒了,谢谢。我不知道这个属性! - Christian Casutt

6
隐藏列可以起到作用,但可能会使DataGridView更难操作。我认为最好根本不要添加这些列。为了实现这一点,我喜欢为我的对象创建一个接口,只公开我想要在DataGridView中显示的字段,然后绑定到接口而不是对象。
public interface IMyBindingObject
{
    string A { get; set; }
    string C { get; set; }
}


public class MyObject : IMyBindingObject
{
    public MyObject(string a, string b, string c)
    {
        A = a;
        B = b;
        C = c;
    }
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
}


private void Form1_Load(object sender, EventArgs e)
{
    List<IMyBindingObject> obj = new List<IMyBindingObject>();
    obj.Add(new MyObject("Test A", "Test B", "Test C"));
    obj.Add(new MyObject("T A", "T B", "T C"));

    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = obj;
}

3
您需要做的是:

您将需要:

dataGrid.AutoGenerateColumns = false;

然后,您需要为X类的每个成员添加一列,并将这些数据绑定。


1

根据名称隐藏列

dgvEmployees.DataSource = data
dgvEmployees.Columns("Id").Visible = False
dgvEmployees.Columns("ElementEtat").Visible = False

0

你需要做的基本事情是:

首先将 AutoGenerateColumns 属性设置为 False。

dataGrid.AutoGenerateColumns = false;

之后在RowDataBound事件中你可以这样做

protected void dataGrid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType==DataControlRowType.Header)
            {

                e.Row.Cells[index of the cell to hide].Visible =false;

            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接