- - PR -
DataGridViewのカラムがどんどん増えていきます。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-03-31 19:06
こんばんは。
質問させて下さい。 DataGridViewを継承したコントロールをフォームに貼り付けているのですが、 ビルドするたびに、カラムがどんどん増えていってしまいます。 長くなるのですが、 継承したコントロールでは、 Newメソッドで、 Me.Columns.Clear() Me.AutoGenerateColumns = False Me.AllowUserToAddRows = False Me.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing Me.AllowUserToOrderColumns = False Me.MultiSelect = False Me.ColumnHeadersHeight = CConst.CCELL_HEIGHT Me.Font = New Font("MS ゴシック", 14, FontStyle.Regular, GraphicsUnit.Point) Dim objColumn1 As New DataGridViewTextBoxColumn Dim objColumn2 As New DataGridViewComboBoxColumn Dim objColumn3 As New DataGridViewTextBoxColumn Dim objColumn4 As New DataGridViewTextBoxColumn Me.Columns.Add(objColumn1) Me.Columns.Add(objColumn2) Me.Columns.Add(objColumn3) Me.Columns.Add(objColumn4) For i As Integer = 0 To Me.Columns.Count - 1 Me.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable Next With m_typeTable .Columns.Add(New DataColumn("選択種別", GetType(String))) .Columns.Add(New DataColumn("選択種別コード", GetType(Integer))) End With Dim objRow1 As DataRow = m_typeTable.NewRow Dim objRow2 As DataRow = m_typeTable.NewRow objRow1.Item(0) = CConst.CTYPE_SINGLE objRow1.Item(1) = 1 objRow2.Item(0) = CConst.CTYPE_MULTI objRow2.Item(1) = 2 m_typeTable.Rows.Add(objRow1) m_typeTable.Rows.Add(objRow2) CType(objColumn2, DataGridViewComboBoxColumn).DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing With objColumn2 .DataSource = m_typeTable .DisplayMember = "選択種別" .ValueMember = "選択種別コード" End With objColumn1.HeaderText = "問番号" objColumn1.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter objColumn1.CellTemplate.Style.Alignment = DataGridViewContentAlignment.MiddleRight objColumn1.Width = CConst.CCELL_WIDTH objColumn2.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter objColumn2.CellTemplate.Style.Alignment = DataGridViewContentAlignment.MiddleCenter objColumn2.HeaderText = "選択種別" objColumn2.Width = CConst.CCELL_WIDTH objColumn3.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter objColumn3.CellTemplate.Style.Alignment = DataGridViewContentAlignment.MiddleRight objColumn3.HeaderText = "最小値" objColumn3.Width = CConst.CCELL_WIDTH objColumn4.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter objColumn4.CellTemplate.Style.Alignment = DataGridViewContentAlignment.MiddleRight objColumn4.HeaderText = "最大値" objColumn4.Width = CConst.CCELL_WIDTH のように、カラムを作成しています。 ビルドすると、このカラムが次々増えていってしまうのです。 たぶん、どこかに致命的なミスがあるのだと思うのですが、 私の知識では、わかりません。 どなたか、お知恵を下さい。 よろしくお願いします。 | ||||||||
|
投稿日時: 2007-03-31 19:35
「ビルドするたび」ではなく「デザイナで保存するたび」じゃないですか? DataGridView を継承したコントロールの コンストラクタで列を追加すると、 それを貼り付けたフォームを デザイナで保存するたびに列が増えてしまいます。 これは私も経験済みですが、根本的な回避策は残念ながら知りません。 根本的ではない解決策としては、デザイナで保存する前に、 表示されている列を全て削除するという手があります。 根本的な解決策をご存知の方がいましたら、フォローお願いします。 | ||||||||
|
投稿日時: 2007-03-31 19:57
ありがとうございます。
>「ビルドするたび」ではなく「デザイナで保存するたび」じゃないですか? すみません。 よく確認していなかったのですが、保存するたびです。 >デザイナで保存する前に、 表示されている列を全て削除するという手があります。 確かに、削除した場合は、追加されていません。 なるべく注意しているのですが、 ついつい保存ボタンを押してしまって、 気が付いたら、カラムが何十個にもなってしまいます。 そうなってしまうと、プロパティの画面で消しても、 デザイナのコードにはしっかり残ってしまい、 それを消すのに苦労しています。 (間違って、必要なものまで消してしまいそうです・・・) | ||||||||
|
投稿日時: 2007-04-02 09:22
ユーザーコントロールのコンストラクタで、基本的な設定を行ってしまうという手もあるかと・・・
ただ、継承ではないので、必要なプロパティなどは自分で実装しなければなりませんけれど。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2007-04-05 18:51
こんばんは。
返答が遅くなってしまってすみません。 >継承ではないので、必要なプロパティなどは自分で実装しなければなりませんけれど。 私には・・・ハードルが凄く高いですね・・・。 | ||||||||
|
投稿日時: 2007-04-06 09:01
そんなこと無いでしょう。 列のオブジェクトが決定されている状態の DataGridView を使いまわそうとしているのでしょうから、何らかの設定が必要なら、ユーザーコントロール内部でラッピングしたコントロールを直接触れば良いだけです。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2007-04-06 10:51
別のコンテナに乗せて、コンテナ側で初期化するだけで回避できるのですか。 結局、デザイナから 「コンストラクタ」 が実行されることを考えると再現しそうなのですが、 これで再現しないということであれば、明らかに IDE 上の不具合ですね。 検証できるのであれば、R・田中一郎さんの方でフィードバックしておいて頂けませんか? -- 本題の方ですが。 どうせコードで初期化するのだから、コンストラクタ以降の然るべきイベントに実装するか、 DesignMode を使用してトリッキーに回避するなどの方法を取った方が良いのではないかとも思います。 (デザイナで表示したいとなると、もうひと手間必要ですけど) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-04-06 14:50
えええええええーーーーーーーーーーーーーーーーーーーーーーーーっ ぶーぶーぶーぶーぶーぶーぶーぶー
上記2つのコントロールをフォームに貼り付けて、保存、閉じる、開くを繰り返すと、class1 のグリッドの列だけが増加することが確認できます。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog |