C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: ソート不許可のグリッドに列の追加はできますか?


(過去ログ 67 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■39153 / inTopicNo.1)  ソート不許可のグリッドに列の追加はできますか?
  
□投稿者/ プリ太 (30回)-(2009/07/30(Thu) 19:35:44)

分類:[C#] 

こんにちは。
プリ太です。

フォームに配置しているDataGridViewコントロールに編集途中で列の追加を行いたいのですが、出来るのでしょうか?

グリッドの列はフォーム表示時に、
DataGridView.ColumnCount = 10;
設定しています。
他にも、ソートを行いたくない&縦1列の選択を行いたのです
foreach (DataGridViewColumn c in DataGridView.Columns)
{
c.SortMode = DataGridViewColumnSortMode.NotSortable;
}
DataGridView.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect;
の設定を行っています。

グリッドにデータを設定しているタイミングで列が足りなくなったので列を追加したいのですが、
DataGridView.ColumnCountの値を+1しようとしたところ
「DataGridView コントロールの SelectionMode が ColumnHeaderSelect に設定されているとき、列の SortMode を Automatic に設定することはできません。」のエラーが表示されました。
SelectionModeにColumnHeaderSelectは設定していますが、SortModeの設定はNotSortableです。
じゃぁ、と思い、SortModeの設定にコメントをかけてみたところ、
今度は「SortMode が DataGridViewColumnSortMode.Automatic に設定されている列を含むとき、
DataGridView コントロールの SelectionMode を ColumnHeaderSelect に設定することはできません。」
とエラーになりました。

ソートはしたくないが、列の追加はしたい、ということは実現できないのでしょうか?

環境はVS2005です。
宜しくお願いします。
引用返信 編集キー/
■39170 / inTopicNo.2)  Re[1]: ソート不許可のグリッドに列の追加はできますか?
□投稿者/ 魔界の仮面弁士 (1176回)-(2009/07/30(Thu) 22:41:22)
No39153 (プリ太 さん) に返信
> フォームに配置しているDataGridViewコントロールに編集途中で列の追加を行いたいのですが、出来るのでしょうか?

dataGridView1.ColumnCount を操作する代わりに、
DataGridViewColumn col = new DataGridViewTextBoxColumn();
col.SortMode = DataGridViewColumnSortMode.NotSortable;
dataGridView1.Columns.Add(col); // または .Columns.Insert
だとどうでしょうか。
引用返信 編集キー/
■39173 / inTopicNo.3)  Re[2]: ソート不許可のグリッドに列の追加はできますか?
□投稿者/ プリ太 (31回)-(2009/07/30(Thu) 23:29:50)
魔界の仮面弁士 さん ありがとうございます。

>>フォームに配置しているDataGridViewコントロールに編集途中で列の追加を行いたいのですが、出来るのでしょうか?
>
> dataGridView1.ColumnCount を操作する代わりに、
> DataGridViewColumn col = new DataGridViewTextBoxColumn();
> col.SortMode = DataGridViewColumnSortMode.NotSortable;
> dataGridView1.Columns.Add(col); // または .Columns.Insert
> だとどうでしょうか。

1列追加はですと、Addでできました。

ただ、一度に追加するのは10列なので、複数列追加の場合を、現在格闘中です。
DataGridViewColumn[] col = new DataGridViewTextBoxColumn[10];
これで宣言して、それぞれの設定を行おうとしたのですが、
foreach (DataGridViewColumn dgv in col)
{
dgv.SortMode = DataGridViewColumnSortMode.NotSortable;
DataGridView.Columns.Add(dgv);
}
だとコンパイルは通るのですが、colはnullの配列ができています。
Gridの配列宣言は何か違うのでしょうか?
引用返信 編集キー/
■39176 / inTopicNo.4)  Re[3]: ソート不許可のグリッドに列の追加はできますか?
□投稿者/ 魔界の仮面弁士 (1177回)-(2009/07/30(Thu) 23:47:03)
2009/07/31(Fri) 09:07:32 編集(投稿者)

No39173 (プリ太 さん) に返信
> 1列追加はですと、Addでできました。
複数一括なら AddRange メソッド。もちろん、Add を繰り返しても良いですけれどね。


> DataGridViewColumn[] col = new DataGridViewTextBoxColumn[10];
これにより、col[0]〜col[9] が生成されますが、個々の要素に
 col[0] = new DataGridViewTextBoxColumn();
のようにインスタンスを割り当てている部分が無いので、
それぞれの要素は null のままです。


> foreach (DataGridViewColumn dgv in col)
> {
>   dgv.SortMode = DataGridViewColumnSortMode.NotSortable;
>   DataGridView.Columns.Add(dgv);
> }
変数名が dgv だと、DataGridView クラスを表すように見えてしまいますが、それはさておき。


単に列を 10 個追加するだけで良いのであれば、
 for(int colIndex = 0 ; colIndex < 10 ; ++colIndex)
 {
  DataGridViewColumn col = new DataGridViewTextBoxColumn();
  col.SortMode = DataGridViewColumnSortMode.NotSortable;
  dataGridView1.Columns.Add(col);
 }
で十分かと。


もし、DataGridViewColumn配列変数が必要だというのであれば、
DataGridViewColumn[] columns = new DataGridViewTextBoxColumn[10];
としておいた上で、
 for(int colIndex = 0 ; colIndex < columns.Length ; ++colIndex)
 {
  columns[colIndex] = new DataGridViewTextBoxColumn();
  columns[colIndex].SortMode = DataGridViewColumnSortMode.NotSortable;
 }
 dataGridView1.Columns.AddRange(columns);
のようにしてみてください。
引用返信 編集キー/
■39178 / inTopicNo.5)  Re[4]: ソート不許可のグリッドに列の追加はできますか?
□投稿者/ プリ太 (32回)-(2009/07/31(Fri) 00:05:49)
魔界の仮面弁士 さん ありがとうございます。

>>1列追加はですと、Addでできました。
> 複数一括なら AddRange メソッド。もちろん、Add を繰り返しても良いですけれどね。

なるほど、そういうことでもOKなのですね。


>>DataGridViewColumn[] col = new DataGridViewTextBoxColumn[10];
> これにより、col[0]〜col[9] が生成されますが、個々の要素に
>  col[0] = new DataGridViewTextBoxColumn();
> のようにインスタンスを割り当てている部分が無いので、
> それぞれの要素は null のままです。

あ、そうですね、作成しただけですね、確かに。
納得しました。


>>foreach (DataGridViewColumn dgv in col)
>>{
>>  dgv.SortMode = DataGridViewColumnSortMode.NotSortable;
>>  DataGridView.Columns.Add(dgv);
>>}
> 変数名が dgv だと、DataGridView クラスを表すように見えてしまいますが、それはさておき。
>
>
> 単に列を 10 個追加するだけで良いのであれば、
>  for(int colIndex = 0 ; colIndex < 10 ; ++colIndex)
>  {
>   DataGridViewColumn col = new DataGridViewTextBoxColumn();
>   dataGridView1.SortMode = DataGridViewColumnSortMode.NotSortable;
>   dataGridView1.Columns.Add(dgv);
>  }
> で十分かと。
>
>
> もし、DataGridViewColumn配列変数が必要だというのであれば、
> DataGridViewColumn[] columns = new DataGridViewTextBoxColumn[10];
> としておいた上で、
>  for(int colIndex = 0 ; colIndex < columns.Length ; ++colIndex)
>  {
>   columns[colIndex] = new DataGridViewTextBoxColumn();
>   columns[colIndex].SortMode = DataGridViewColumnSortMode.NotSortable;
>  }
>  dataGridView1.Columns.AddRange(columns);
> のようにしてみてください。

ループの中で宣言してもよいとは思いませんでした。
重複してしなうと思いこんでいたので、宣言はループの外に作らないといけないと思いこんでいました。
そうなんですね・・・

使い方はデータの表示、編集で配列機能は必要ないので、先に提示していただいた方法で組み込んでみたところ、あっさり追加されました。

こういう宣言の仕方もあるのだと勉強になりました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -