我有一个List<>
的{{1}}。
class X
有3列:X
,a
和b
。
现在我绑定c
上的列表:
DataGridView
如何仅在dataGrid.DataSource = list;
中显示列a和c
,请隐藏列GridView
?
如果可能的话,我不会编辑列表本身,如果可能的话,我不会生成新的列表。
这里有解决方案吗?
答案 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列名称是这样的
("Foo/Bar")
"Baz"
"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