none
dataGridViewの列を並べかえる RRS feed

  • 質問

  • http://social.msdn.microsoft.com/Forums/ja-JP/csharpexpressja/thread/cdeb81ef-1d0f-4a40-8e48-53741e8958e3

    の続きなのですが,dataGridView に 「あ」「い」「う」「え」「お」と並んでいる並んでいる列を「え」「お」「あ」「い」「う」と並べ変えたいと思って次のようなコードをかいてみました。

    0   1  2  3   4 

    あ い う え お

    int iTime=3;
    for(int i=0:i<iTime;i++)
    {
       dataGridView1.Columns[0].DisplayIndex=4
    }
    

    私の期待は

    i=0 いうえおあ, i=1 うえおあい, i=2 えおあいう  となることでしたが,「い」「う」「え」「お」「あ」になるだけでした。

    何かの処理がたりないのでしょうか,それとも別の方法でないといけないのでしようか。

    お教え願います。 

    2010年8月4日 3:59

回答

  • 兎にも角にも、並び順が変わったということは
    ゴールに近いということじゃないでしょうか。

    for 文で i を変えているのに i を使っていないです。

    • 回答としてマーク Koyan 2010年8月4日 4:59
    2010年8月4日 4:08

すべての返信

  • 兎にも角にも、並び順が変わったということは
    ゴールに近いということじゃないでしょうか。

    for 文で i を変えているのに i を使っていないです。

    • 回答としてマーク Koyan 2010年8月4日 4:59
    2010年8月4日 4:08
  • 期待された結果をみるかぎり、DisplayIndex と Index を混同されているか、Columns[] のインデクサの意味を取り違えておられるようです。

    DisplayIndex は、表示の並び順、Index はデータの並び順です。
    Columns[] のインデクサに与えるのは、データの順序である Index です。つまり、表示の順序を変更してもデータの順序はかわりませんので、Columns[0] は常に "あ" を取得します。
    すべての列を右に2つ移動したいのであれば、すべての列の DisplayIndex を設定する必要があります。

    foreach (DataGridViewColumn column in dataGridView1.Columns)
    {
      column.DisplayIndex = (column.Index + 2) % dataGridView1.Columns.Count;
    }
    
    2010年8月4日 4:56
  • for 文で i を変えているのに i を使っていないです。

    dataGridView1.Columns[0+i].DisplayIndex=4 で解決できました。anningoさん,ありがとうございました。

    *これを実際の場面で,繰り返し使えるようにしたいと思っているのですが,何か難関が待ち受けているように思えます。その節はまたご指導のほど,よろしくお願いします。

    2010年8月4日 4:58
  • K.Takaokaさん,ありがとうございます。せっかく解説をしていただきましたのに,私には難しすぎて理解できませんでしたが,実際の場面では列名が偶然にも”c4DataGridViewCheckBoxColumn”となっておりましたので,これを基にanningoさんに教えていただいたように書いてみましたら,無事に完成できました。

    anningoさん,K.Takaokaさんのお陰と感謝します。ありがとうございました。

     private void tbxSmonth_TextChanged(object sender, EventArgs e)
        {
          string[] colName = new string[13];
          int iMonth = 0;
          string sMonth = tbxSmonth.Text;
          if (sMonth != "")
          {
            iMonth = int.Parse(tbxSmonth.Text);
            if (iMonth >= 0 && iMonth <= 12)
            {
              for (int i = 0; i < 12; i++)  
              {
                if (i != 0) iMonth += 1;
                if (iMonth == 13) iMonth = 1;
                colName[i] = "c" + iMonth.ToString() + "DataGridViewCheckBoxColumn";
                meiboDataGridView.Columns[colName[i]].DisplayIndex = 6 + i;
              }
            }
          }
        }
    
    2010年8月4日 6:59
  • I think he did the right thing

     

    兎にも角にも、並び順が変わったということは
    ゴールに近いということじゃないでしょうか。

    for 文で i を変えているのに i を使っていないです。 <cite></cite>

    2010年8月11日 2:51