2017-05-02 13 views
0

Panelの中にDataGridViewがありますのでスムーズにスクロールできます。DataGridViewには最大サイズがありますか?

DataGridViewの高さは、行の高さに設定されています。

は、私は現時点ではe.ColumnIndexの== 0

が、私は約1700行をロードしていたときにのみ反応するDGVのCellContentClickイベントを持っています。約32569pxの高さにある約1489行後、これがイベントの発火をクリックできる最後の行です。

[編集] 02 May 2017 9:59 PM AU
何が起きているかを示すコードを追加してください。フォームには、AutoScrollをtrueに設定してカスタムパネル(下のコード)を追加し、スクロールバーをnoneに設定してDataGridViewを配置します。

パネルクラス

public class CustomPanel : System.Windows.Forms.Panel 
    { 
     protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl) 
     { 
      // Returning the current location prevents the panel from scrolling to the active control when the panel loses and regains focus 
      return this.DisplayRectangle.Location; 
     } 
    } 

データクラス

public class dgvRecord 
    { 
     public double ID { get; set; } 
     public string TYPE { get; set; } 
     public string NAME { get; set; } 
     public DateTime DATE { get; set; } 
     public dgvRecord() { } 
    } 

フォームクラス

using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace dgvInPanel 
{ 
    public partial class Form1 : Form 
    { 
     List<dgvRecord> recList = new List<dgvRecord>(); 
     int normalRowHeight = 0; 
     public Form1() 
     { 
      InitializeComponent(); 
      for (int rCount = 0; rCount < 1800; rCount++) 
      { 
       dgvRecord rec = new dgvRecord() { ID = 20170501000000, TYPE = "Asset", NAME = "Joe Bloggs", DATE = new DateTime(2017, 05, 02, 10, 30, 15) }; 
       recList.Add(rec); 
      } 
     } 

     private void Form1_Shown(object sender, EventArgs e) 
     { 
      DataGridViewCellStyle imageCellStyle = new DataGridViewCellStyle(); 
      imageCellStyle.SelectionBackColor = dgv.DefaultCellStyle.BackColor; 
      imageCellStyle.SelectionForeColor = dgv.DefaultCellStyle.ForeColor; 
      imageCellStyle.Alignment = DataGridViewContentAlignment.TopCenter; 
      DataGridViewCellStyle otherCellStyle = new DataGridViewCellStyle(); 
      otherCellStyle.Alignment = DataGridViewContentAlignment.TopLeft; 

      dgv.AllowUserToResizeRows = false; 
      dgv.AllowUserToAddRows = false; 
      dgv.AllowUserToDeleteRows = false; 
      dgv.ReadOnly = true; 

      DataGridViewCell dgvc_ID = new DataGridViewTextBoxCell(); 
      DataGridViewTextBoxColumn dgvTbxCol_ID = new DataGridViewTextBoxColumn() 
      { 
       CellTemplate = dgvc_ID, 
       Name = "ID", 
       HeaderText = "ID", 
       DataPropertyName = "ID", 
       DefaultCellStyle = otherCellStyle, 
      }; 
      dgv.Columns.Add(dgvTbxCol_ID); 

      DataGridViewCell dgvc_TYPE = new DataGridViewTextBoxCell(); 
      DataGridViewTextBoxColumn dgvTbxCol_TYPE = new DataGridViewTextBoxColumn() 
      { 
       CellTemplate = dgvc_TYPE, 
       Name = "TYPE", 
       HeaderText = "Type", 
       DataPropertyName = "TYPE", 
       AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells, 
       DefaultCellStyle = otherCellStyle, 
      }; 
      dgv.Columns.Add(dgvTbxCol_TYPE); 

      DataGridViewCell dgvc_R_NAME = new DataGridViewTextBoxCell(); 
      DataGridViewTextBoxColumn dgvTbxCol_R_NAME = new DataGridViewTextBoxColumn() 
      { 
       CellTemplate = dgvc_R_NAME, 
       Name = "R_NAME", 
       HeaderText = "Name", 
       MinimumWidth = 110, 
       DataPropertyName = "NAME", 
       DefaultCellStyle = otherCellStyle, 
      }; 
      dgv.Columns.Add(dgvTbxCol_R_NAME); 

      DataGridViewCell dgvc_DATE = new DataGridViewTextBoxCell(); 
      DataGridViewTextBoxColumn dgvTbxCol_DATE = new DataGridViewTextBoxColumn() 
      { 
       CellTemplate = dgvc_DATE, 
       Name = "DATE", 
       HeaderText = "Date", 
       MinimumWidth = 135, 
       DataPropertyName = "DATE", 
       DefaultCellStyle = otherCellStyle, 
      }; 
      dgv.Columns.Add(dgvTbxCol_DATE); 

      dgv.DataSource = recList; 

      int dgvWidth = 0; 
      int dgvHeight = 0; 
      foreach (DataGridViewRow row in dgv.Rows) 
      { 
       if (dgvHeight == 0) 
       { 
        normalRowHeight = row.Height; 
       } 
       dgvHeight += row.Height; 
      } 
      dgvWidth = pnlCust.Width - 17; 
      dgv.Size = new Size(dgvWidth, dgvHeight); 
      dgv.DataSource = recList; 
     } 
    } 
} 

あなたはこれを実行すると、その一番上にあるセルをクリックしてコンテンツを選択してください。これは問題ありません。

もしあなたが下に行くなら、同じことをやってみてください。私はそれが選択を許さないと思っています。 これを引き起こす原因は何ですか?

[EDIT2] 03 5月2017 8:00 AM AU
DGVをパネルに配置する理由はスムーズなスクロールを得るためです。私がDGVでスムーズにスクロールすることができたら、私はそれを使用します。

+0

すべての理論の代わりに、いくつかのコードは確かに役に立ちます –

+0

'DataGridView's Height = 32569? – JohnG

+2

この制限は、あなたのユーザーがまだあなたと話したいと思うポイントをかなり超えています。高さの制限はWindowsでは厳しい制限です。マウス通知メッセージは、XおよびYマウス座標を16ビット値でエンコードします。 DGVは単独でスクロールバーを表示できますので、これは必要ありません。 –

答えて

1

Datagridview.Rows.Countは、int値を返します。したがって、最大値にすることができます2147483647

+1

コメントにHans Passantが書いているように、Windowsのすべてのコントロールの物理的なサイズは16ビットに制限されています。 –

0

非常に長いDataGridViewは役に立ちません。

あなたに私のアドバイス、

[0-1000] - [1000年から2000年] - .....上記のボタンを使用して

+0

確かに質問に答えていません –

+0

答えはありません。 –

+0

コメントにこれを入れないと投票してしまう可能性があります。 –

関連する問題