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

时间:2011-11-08 17:40:07

标签: c# gridview datagridview

我有一个List<>的{​​{1}}。

class X有3列:Xab

现在我绑定c上的列表:

DataGridView

如何仅在dataGrid.DataSource = list; 中显示列a和c,请隐藏列GridView

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

这里有解决方案吗?

5 个答案:

答案 0 :(得分: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"); }
  }
}

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

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

如果您不想显示列,您可以像这样放置...... [可浏览(错误)]

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

我希望它会帮助你...

答案 1 :(得分: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;
}

答案 2 :(得分:3)

您需要:

dataGrid.AutoGenerateColumns = false;

然后你需要为每个X类成员添加一个列并对其进行数据绑定。

答案 3 :(得分: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;

            }
        }

答案 4 :(得分:0)

或按名称隐藏列

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