使用List <>作为DataSource隐藏DataGridView中的列?

Kov*_*ovu 5 c# gridview datagridview

我有List<>一个class X.

X有3列:a,bc.

现在我将List绑定在DataGridView:

dataGrid.DataSource = list;
Run Code Online (Sandbox Code Playgroud)

如何只显示列a和cGridView,所以隐藏列b

如果可能的话,我不会编辑列表本身,如果可能的话,我不会生成新的列表.

有解决方案吗?

Eni*_*ate 9

我假设你的班级是这样的:

private class MyClass {
  [DisplayName("Foo/Bar")]
  public string FooBar { get; private set; }
  [Browsable(False)]
  public decimal Baz { get; private set; }
  [DisplayName("Baz")]
  public CurrencyBaz
  {
        get { return string.Format(Baz, "C2"); }
  }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,gridview列名称是这样的

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

如果你不想显示列,你可以这样放置...... [可浏览(假)]

在上面的代码列中,名称2不显示......

我希望它会帮助你......


Rob*_*ike 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;
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*yer 3

您将需要:

dataGrid.AutoGenerateColumns = false;
Run Code Online (Sandbox Code Playgroud)

然后,您需要为类 X 的每个成员添加一列并对它们进行数据绑定。