2009-07-06 9 views
0

私は、ユーザーが挿入/更新/削除できるように、linqをdatagridviewにバインドしています。しかし、私はId列を隠したいと思う。私はむしろハードコーディングしたいと思います。プログラムによってdatagridviewでlinq-to-sql列を非表示にするには?

datagridview.columns[id].visible=false 

idカラム名が変更された場合。実行時の列のリストを取得するためにリフレクションを進めることができますが、設計時に列名をチェックすることはできません。出来ますか?

IDを含まないようにクエリを変更すると、id列名の代わりに列一覧をハードコーディングしているので、列が追加されていれば、代わりに手動で更新する必要があります。

答えて

2

あなたはWinformsのを使用している場合、あなたはあなたのLINQツーSQL型に型付けされたあなたのFormBindingSourceを持っている必要があります。これを行うと、そのクラスで利用可能なすべてのフィールドの完全なデザイナーサポートが得られます。

LINQ-to-SQLエンティティ(またはその他のクラス)で多くのデータバインディング作業を行っている場合は、Mark GravellによってHyperDescriptorにチェックすることを強くお勧めします。クラスのプロパティの繰り返し実行時呼び出しをバイパスすることにより、UIデータバインディングのパフォーマンスが大幅に向上します。

+0

デザインタイムを使用している場合は、バインディングソースのみが機能します。databinding =/ 現在、部分プロパティとしては存在しませんので、これらの列に[Browsable(false)]属性を追加することはできません。 – Maslow

+0

@Maslow:あなたの質問は、設計時に何かを使いたいと思っていたようです。デザインタイムバインディングを使用したくない、または使用できない特別な理由はありますか?いずれにしても、(datagridview.columnsのような)インデクサーを、コンパイル時に値が渡される限りコンパイル時に安全にする手段はありません。 –

+0

@Adam:DataGridViewは、ユーザーがどのビューに設定されているかに応じて異なるオブジェクトタイプを表示しているため、デザインタイムバインドを行っていません。たぶんこれは時期尚早の最適化であり、異なる設計時のデータグリッドビューを飛び越して飛び越えるオーバーヘッドは悪くありません。うーん、それはプロパティ名のコンパイル時の安全性が存在しないように見えますが、実際にはコンパイラに追加するのは難しい機能のようには思えません。 – Maslow

0

htmlではできませんでしたか?またはASP.NETを使用していますか?

<asp:BoundField DataField="id" Visible="false" /> 
+1

私はAsp.NetのようにdataGridViewを考えていませんでしたが、そこにdataGridと呼ばれていると思いましたか?いずれにせよ、私はwinformsにいる – Maslow

+0

右。 ASP.NETのDataGridまたはGridViewと呼ばれています。 DataGridViewはWinFormsコントロールです。 –

関連する問題