簡體   English   中英

數據網格和設計器的奇怪VS2010行為

[英]Strange VS2010 behavior with datagrid and designer

我正在使用帶有DataGridView控件的winforms應用程序,我遇到了一些令人沮喪的事情。

首先,我想關閉AutoColumnGeneration,但它沒有在屬性中列出。 沒問題,我可以用一行代碼做到這一點......這就是它變得奇怪的地方:

  1. 在我的代碼中,DataGridView無法訪問。 它就像在表格上不存在一樣。 考慮到這一點,因為設計者將其聲明為InitializeComponent()方法的一部分,而不是初始化所有其他控件的地方。

  2. 因為它在設計師中,我所做的任何改變都會被顛倒,所以我無法解決這個問題。

有沒有辦法阻止視覺工作室這樣做? 我通過使用其中一個datagrid列(可訪問的ARE)來創建對其關聯的datagridview的引用並以此方式訪問它。 它有效,但它的丑陋和根本不直觀。

我想我找到了:

在設計器中,單擊DataGridView控件,並將GenerateMember的屬性更改為true。 我猜它被設置為假。

該屬性用於執行此操作:從代碼窗口隱藏控件。 它對於您不需要在代碼中處理的Labels或ToolStripSeparators非常有用。

我個人使用綁定源作為數據源,它甚至可以是一個對象,然后在列下它將列出所有可用列,您可以選擇哪些可見,以及一系列其他選項,包括格式。

單擊數據源上的下拉列表並添加新數據源,然后選擇必要的對象,在我的示例中為訂單詳細信息對象。 這是我的一些設計師代碼,由VS2010創建

this.dgvOrderDetails.DataSource = this.orderDetailBindingSource;
this.orderDetailBindingSource.DataSource = typeof(OrderDetail);

設置數據以填充datagridview的綁定源代碼(我編寫了這部分)

orderDetailBindingSource.DataSource = orderDetList;

然后只需單擊datagridview的Columns屬性上的省略號,它將列出對象中可用的所有列,並設置我想要的列,順序,格式等。

至於第二個問題,一旦你使用設計師進行上面列出的更改,我認為你不會遇到這個問題。

在我的例子中,我在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屬性(在Design節點下)並確保將其設置為True 設置為True ,Designer將為DataGridView控件聲明成員變量。

奇怪的是,默認值似乎是True ,所以我很好奇它是如何更改為False 也許我在設置名稱時錯誤點擊了?

順便說一下,@ LarsTech的回答與此次更新相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM