我正在使用带有DataGridView控件的winforms应用程序,我遇到了一些令人沮丧的事情。
首先,我想关闭AutoColumnGeneration,但它没有在属性中列出。没问题,我可以用一行代码做到这一点......这就是它变得奇怪的地方:
在我的代码中,DataGridView无法访问。它就像在表格上不存在一样。考虑到这一点,因为设计者将其声明为InitializeComponent()方法的一部分,而不是初始化所有其他控件的地方。
因为它在设计师中,我在那里所做的任何改变都被颠倒了所以我无法解决这个问题。
有没有办法阻止Visual Studio这样做?我通过使用其中一个datagrid列(可访问的ARE)来创建对其关联的datagridview的引用并以此方式访问它。它有效,但它的丑陋和根本不直观。
答案 0 :(得分:2)
我想我找到了它:
在设计器中,单击DataGridView控件,并将GenerateMember
的属性更改为true。我猜它被设置为假。
该属性用于执行此操作:从代码窗口隐藏控件。它对于您不需要在代码中处理的Labels或ToolStripSeparators非常有用。
答案 1 :(得分:0)
我个人使用绑定源作为数据源,它甚至可以是一个对象,然后在列下它将列出所有可用的列,您可以选择哪些可见,以及一系列其他选项,包括格式
单击数据源上的下拉列表并添加新数据源,然后选择必要的对象,在我的示例中为订单明细对象。以下是我的一些设计师代码,由VS2010
创建this.dgvOrderDetails.DataSource = this.orderDetailBindingSource;
this.orderDetailBindingSource.DataSource = typeof(OrderDetail);
设置数据以填充datagridview的绑定源代码(我编写了这部分)
orderDetailBindingSource.DataSource = orderDetList;
然后只需单击datagridview的Columns属性上的省略号,它将列出对象中可用的所有列,并设置我想要的列,顺序,格式等。
关于第二个问题,一旦您使用设计师进行上面列出的更改,我认为您不会遇到这个问题。
答案 2 :(得分:0)
在我的情况下,我在Form的部分类(我的代码的文件,而不是Designer的文件)中声明了一个私有属性,以通过在Controls层次结构中导航来返回控件。
private DataGridView MyGrid
{
get { return (DataGridView)this.Controls[0].Controls[1].Controls[0].Controls[1].Controls[0]; }
}
我同意,应该有更好的方法,例如Visual Studio Designer声明控件就像它对表单上的大多数其他控件一样。与此同时,这也有效。
警告!强>
如果更改了表单的控件层次结构,则必须手动更新属性的定义。
修改强>
我有一个更好的解决方案 - 至少在Visual Studio 2012中。
在Designer的形式中,选择DataGridView,打开其属性并查找GenerateMember
属性(在“设计”节点下),并确保将其设置为True
。设置为True
后,Designer将为DataGridView控件声明成员变量。
奇怪的是,默认值似乎是True
,所以我很好奇它是如何更改为False
的?也许我在设置名称时误点击了?
顺便说一下,@ LarsTech的回答与此次更新相同。