none
DataGridViewに列(可変数)を追加する方法 RRS feed

  • 質問

  • web上で探してみますと,

    DataGridViewTextBoxColumn column1 = new DataGridViewTextBoxColumn();
    
    DataGridViewTextBoxColumn column2 = new DataGridViewTextBoxColumn();
    
    DataGridViewTextBoxColumn column3 = new DataGridViewTextBoxColumn();
    
    

    というようにして追加できるとの説明がありましたが,これはあらかじめ追加する列の数が分かっているときには使えますがそうでないときはどうしたらよいのかわからないでいます。

    Formに張り付けたばかりのデータソースをバインドしていないDatGridView1にComboBox1のアイテムを列名にして列を追加しようとしています。

    for(int i = 0; i < conboBox1.Items.count; i++)
    
    {
    
     //comboBox1.Items[i]を列名にして
    
     //列を追加したい
    
    }
    
    
    上のことについて,お教え願います。
    2010年8月5日 5:49

回答

  • こんな感じでどうでしょうか。

    for(int i = 0; i < comboBox1.Items.count; i++)
    {
      DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
      column.HeaderText = comboBox1.Items[i].ToString();
      dataGridView.Columns.Add(column);
    }
    
    

    参考URLも貼っておきます。

    http://dobon.net/vb/dotnet/datagridview/addcolumn.html


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク nrael 2010年8月5日 21:35
    2010年8月5日 6:02
  • また「右寄せ」はどのように実現するのでしょうか。お教え願います。


    column.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft

    とかでできます。DataGridViewCellStyle.Alignment プロパティ をご覧ください。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク nrael 2010年8月5日 21:35
    2010年8月5日 13:36
    モデレータ
  • もう解決されたようで既にお気づきだと思いますが、N0は
    column.DefaultCellStyle.Format  = "N0";
    と設定できます。
    デザイナーでDataGridViewを設定した後、 コンストラクタにあるInitializeComponent()を右クリックして「定義へ移動」をクリックすると、デザイナーで設定したことがコードとして自動生成されていますから、それを参考にするのも勉強になると思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク nrael 2010年8月6日 8:17
    2010年8月6日 0:38
    モデレータ

すべての返信

  • こんな感じで column1 みたいな変数名を使わないで済みます。
    あとはわかりますよね?

    List<DataGridViewCheckBoxColumn> columnList = new List<DataGridViewCheckBoxColumn>();

    columnList.Add(new DataGridViewCheckBoxColumn());
    columnList.Add(new DataGridViewCheckBoxColumn());
    columnList.Add(new DataGridViewCheckBoxColumn());

     

    2010年8月5日 6:02
  • こんな感じでどうでしょうか。

    for(int i = 0; i < comboBox1.Items.count; i++)
    {
      DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
      column.HeaderText = comboBox1.Items[i].ToString();
      dataGridView.Columns.Add(column);
    }
    
    

    参考URLも貼っておきます。

    http://dobon.net/vb/dotnet/datagridview/addcolumn.html


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク nrael 2010年8月5日 21:35
    2010年8月5日 6:02
  •  anningoさん,なかむらさん,お二人にお礼申します。

    >あとはわかりますよね?(anningoさん)

    情けないことに,まったくわからないのです。

    >こんな感じでどうでしょうか。

    どうにか下のようにやってみました。

    column.DefaultCellStyle.Format とcolumn.DefaultCellStyle.Alignment で数字の「3けた表示」と「右寄せ」でつまずいています。「3ケタ表示」は,”c”だと先頭に¥マークがついてしまいますので,"###,###,##0"で実現できたのですが,”c”に変わる簡便な表記方法はないのでしょうか。また「右寄せ」はどのように実現するのでしょうか。お教え願います。

    private void inSun()
    {
     //コンボボックスcbxGroupの各アイテムをヘッダー・班名に
     int iItem = cbxGroup.Items.Count;
     for (int i = 0; i < iItem + 1; i++)
     {
      DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
      if (i == 0)
      {
       column.HeaderText = "";
       column.Width = 66;
      }
      else if (i == iItem)
      {
       column.HeaderText = "総 計";
       column.Width = 80;
       column.DefaultCellStyle.Format = "###,###,##0";
       //column.DefaultCellStyle.Alignment = "MiddleRight";
      }
      else
      {
       column.HeaderText = cbxGroup.Items[i].ToString();
       column.Width = 72;
       column.DefaultCellStyle.Format = "###,###,##0";
       //column.DefaultCellStyle.Alignment = "MiddleRight";
      }
      HanDatagridView.Columns.Add(column);
     }
     //行見出し
     int r;
     r = HanDatagridView.Rows.Add();
     HanDatagridView[0, r].Value = "予 定 額";
     r = HanDatagridView.Rows.Add();
     HanDatagridView[0, r].Value = "納 入 額";
     r = HanDatagridView.Rows.Add();
     HanDatagridView[0, r].Value = "未 納 額";
     HanDatagridView.AllowUserToAddRows = false;
    }
    
    
    2010年8月5日 11:29
  • また「右寄せ」はどのように実現するのでしょうか。お教え願います。


    column.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft

    とかでできます。DataGridViewCellStyle.Alignment プロパティ をご覧ください。


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク nrael 2010年8月5日 21:35
    2010年8月5日 13:36
    モデレータ
  • column.DefaultCellStyle.Format とcolumn.DefaultCellStyle.Alignment で数字の「3けた表示」と「右寄せ」でつまずいています。「3ケタ表示」は,”c”だと先頭に¥マークがついてしまいますので,"###,###,##0"で実現できたのですが,”c”に変わる簡便な表記方法はないのでしょうか。


    整数ですよね。N0 でいいと思います。詳しくは 標準の数値書式指定文字列 をご覧ください。

     class Program
     {
      static void Main(string[] args)
      {
       Console.WriteLine(1234567890.ToString("N0"));
       Console.ReadKey();
      }
     }
    
    

    ひらぽん http://d.hatena.ne.jp/hilapon/
    2010年8月5日 14:17
    モデレータ
  • ひらぽんさん,ありがとうございました。お陰さまで右寄せは解決しました。

    >整数ですよね。N0 でいいと思います。

    上のコードにどう書くとよいのか,試行錯誤をかさねましたがわからないままでいます。その中での収穫はcolumn.DefaultCellStyle.Format = "n"; という方法もあるということでした。しかし,「NO」であればセルへの直接手入力にも対応できると思いますので,私の現在の場面での「NO」の設定方法を教えていただけませんでしょうか。

    2010年8月5日 20:28
  • 直接手入力には以下で対応することとしました。

    column.ValueType = typeof(Int32);
    column.DefaultCellStyle.Format = "#,0";
    
    anningoさん,なかむらさん,ひらぽんさん,ありがとうございました。
    2010年8月5日 21:34
  • もう解決されたようで既にお気づきだと思いますが、N0は
    column.DefaultCellStyle.Format  = "N0";
    と設定できます。
    デザイナーでDataGridViewを設定した後、 コンストラクタにあるInitializeComponent()を右クリックして「定義へ移動」をクリックすると、デザイナーで設定したことがコードとして自動生成されていますから、それを参考にするのも勉強になると思います。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク nrael 2010年8月6日 8:17
    2010年8月6日 0:38
    モデレータ