- - PR -
DataGridの選択マークの制御について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-24 17:00
お世話さまです。
VS.NET2003(VB)で開発しています。 DataGridの行選択のコントロールをやっているのですが 選択された行の反転表示のコントロールは DataGrid.Select(位置変数) という感じで制御できているのですが、 この恣意的な反転表示と、行のセレクタに表示される 三角マークが一致しないので見た目が悪くて困っています。 恐らくこの三角マークはカレント行の意味で表示されている と思うのですが、この三角マークを反転表示と同じ行に 恣意的に変更することが可能なのかどうかご教示願います。 もし、制御が不能なのであれば、このセレクタの列を削除(非表示) したいとも考えています。 併せて、削除(非表示)の方法をご教示頂けると助かります。 以上、宜しくお願い致します。 | ||||||||
|
投稿日時: 2005-08-24 17:05
舌の根も乾かぬウチに自己レスです。^^;
CurrentRowIndexプロパティで制御できました。 お騒がせしました。 | ||||||||
|
投稿日時: 2008-10-02 11:12
返信ではないのですが、追っかけ質問です。VB2005のDataGridViewを使っています。
VB2003では「CurrentRowIndex」で解決と書かれていました。VB2003のDataGrid で試してみていませんが、VB2005のDataGridViewでCurrentRow.IndexとかSelectRows.とか 触ってみましたが、三角マークを消す方法が見つかりません。 教えてください。 | ||||||||
|
投稿日時: 2008-10-02 14:38
三角マークを直接どうこうすることはできないので、 ・前景色と背景色を同じにしてごまかす ・ヘッダを隠して、一番左のデータ列をヘッダっぽく見せる ・三角マークが隠れるくらいまでヘッダを縮める ・カスタム描画で頑張る のような方法になります。 以下のスレッドも参照してください。 http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=573974&SiteID=7 | ||||||||
|
投稿日時: 2008-10-02 14:41
こんにちは
どこで見たか忘れましたが手元に同様の事例がありましたので 参考になれば・・・
列ヘッダーの場合はこんなのもありますが・・ http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1815100&SiteID=7 | ||||||||
|
投稿日時: 2008-10-02 15:59
seaiさん、rainさん、お返事ありがとうございました。seaiさんに教えてもらった方法で解決しました。やった!って感じです。三角マークために、半日ほど潰しました。もっと早く聞けばよかった。ありがとうございました。
| ||||||||
|
投稿日時: 2008-11-06 19:10
返答ではないのですが、便乗しておっかけ質問です。
同様のことをC#でやろうとしていて、できるには一応できたのですが、 一部DataGridViewのプロパティを変えたところ、こけてしまいます。 プロパティはAllowUserToAddRowsでfalseに設定する(一番下に追加行の※印がつく)ととこけてしまいます。 これはrainさんが引用されていたスレッド中の http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=573974&SiteID=7 trapemiyaさんが記述している 「また、新規行の追加を許していると、こけてしまうようですので、それを禁止するか、もしくはDatGridViewでOnRowsAddedをオーバーライドし、その中で、NewRowIndexの場合には、 this.Rows[this.NewRowIndex].HeaderCell = new myDataGridViewRowHeaderCell(); として下さい。」 のことだと思うのですが、実装方法がわかりません。 よろしくお願いします。 | ||||||||
|
投稿日時: 2008-11-07 12:34
自己レスです。
悪戦苦闘しながら、こういうことかなと実装してみました。 public class myCustomGrid : DataGridView { protected override void OnRowsAdded(DataGridViewRowsAddedEventArgs e) { if (e.RowIndex == NewRowIndex) { this.Rows[this.NewRowIndex].HeaderCell = new myDataGridViewRowHeaderCell(); } } } しかし、やはりこけてしまいます。わからないなりに色々調べているうちに 勘違いしているような気がしてきました。 AllowUserToRowsはtrueで最終行の*印が表示され、ユーザが行を追加できる。 また、falseで*印の行の表示がなくなり、ユーザが行を追加できないようにする。 ということは・・・ falseで追加権限を与えていないから、プログラム内で行を追加しようとして こけているのでは? と思い、最初の設定でプロパティを変更するのではなく、行追加した後でfalseに変更。 予想通りうまく動作しました。(OnRowsAddedのoverrideは不要) 結局のところ、禁止するなら、Trueにしといて、後からfalseすればよかっただけ 、許可するなら、overrideがいるということだったのですね。 自己解決できたと思います。お騒がせしました。但し、 「勘違いしてるよ〜」等ありましたら、ご指摘下さい。 よろしくお願いします。 |
1