我现在有一些数据,条数不定,我现在要做的就是不管窗体显示多大,根据窗体的大小,判断DataGridView是否出现滚动条,
如果出现滚动条,就把剩下的数据显示在另一个DataGridView中,以此类推 具体实现怎么实现,

解决方案 »

  1.   

    这是datagridview替换系统滚动条的代码,看懂这个实现你那个不难private void SetupScrollBars()
            {
                // Vertical Scroll Bar Replacement
                Type t = typeof(System.Windows.Forms.DataGridView);
                FieldInfo fi = t.GetField("vertScrollBar", BindingFlags.NonPublic | BindingFlags.Instance);
                if (fi == null) return;
                System.Windows.Forms.ScrollBar sb = fi.GetValue(this) as System.Windows.Forms.ScrollBar;
                if (sb == null) return;
                //sb.Scroll += new ScrollEventHandler(sb_Scroll); return;
                MethodInfo mi = t.GetMethod("DataGridViewVScrolled", BindingFlags.NonPublic | BindingFlags.Instance);
                if (mi == null) return;
                VScrollBarEx newVSb = new VScrollBarEx();
                //newVSb.Minimum = sb.Minimum;
                //newVSb.Maximum = sb.Maximum;
                //newVSb.SmallChange = sb.SmallChange;
                //newVSb.LargeChange = sb.LargeChange;
                //newVSb.Top = sb.Top;
                //newVSb.AccessibleName = sb.AccessibleName;
                //newVSb.Left = sb.Left;
                //newVSb.Visible = sb.Visible;
                newVSb.Scroll += (ScrollEventHandler)ScrollEventHandler.CreateDelegate(typeof(ScrollEventHandler), this, mi);
                fi.SetValue(this, newVSb);
                sb.Dispose();
                this.Controls.Remove(sb);
                this.Controls.Add(newVSb);            // Horizontal Scroll Bar Replacement
                fi = t.GetField("horizScrollBar", BindingFlags.NonPublic | BindingFlags.Instance);
                if (fi == null) return;
                sb = fi.GetValue(this) as System.Windows.Forms.ScrollBar;
                if (sb == null) return;
                mi = t.GetMethod("DataGridViewHScrolled", BindingFlags.NonPublic | BindingFlags.Instance);
                if (mi == null) return;            HScrollBarEx newHSb = new HScrollBarEx();
                //newHSb.Minimum = sb.Minimum;
                //newHSb.Maximum = sb.Maximum;
                //newHSb.SmallChange = sb.SmallChange;
                //newHSb.LargeChange = sb.LargeChange;
                //newHSb.Top = sb.Top;
                //newHSb.AccessibleName = sb.AccessibleName;
                //newHSb.Left = sb.Left;
                //newHSb.Visible = sb.Visible;
                //newHSb.RightToLeft = sb.RightToLeft;
                newHSb.Scroll += (ScrollEventHandler)ScrollEventHandler.CreateDelegate(typeof(ScrollEventHandler), this, mi);
                fi.SetValue(this, newHSb);
                sb.Dispose();
                this.Controls.Remove(sb);
                this.Controls.Add(newHSb);
            }
      

  2.   

      给你一些应该有帮助的代码。
    1 当前展示的第一行   2 是否出现滚动条var rowBandInfo = typeof(DataGridView).GetField("displayedBandsInfo", BindingFlags.Instance | BindingFlags.NonPublic);
                if (rowBandInfo != null)
                {
                    var val = rowBandInfo.GetValue(dataGridView1);
    //获取显示的第一行
                    var firstDisplayedScrollingRow = (int)rowBandInfo.FieldType.GetProperty("FirstDisplayedScrollingRow", BindingFlags.Instance | BindingFlags.Public).GetValue(val, null);
    }if(dataGridView1.DisplayedRowCount(true)<dataGridView1.Rows.Count)//出现滚动条
     {  }
      

  3.   

    很简单,一旦有滚动条必然那一行的值无法在屏幕可见
    foreach (DataGridViewRow dgrv in dataGridView1.Rows)
    {
         if (!dgrv.Displayed)
          {
               string v = dgrv.Cells["ColumnName"].Value.ToString();//获取列值
               //还可以知道索引
          }
          break;
    }
      

  4.   

    计算所有行高和
    datagridview1.Rows.Count * 行高
    看是否大于 datagridview1的Height - 标题栏高度行高、标题栏高度  都可以知道
      

  5.   

    但是怎么样把剩下的数据显示在另一个DataGridView里面,在第二个dgv显示不了的话,把剩下的数据在显示到第三个DataGridView里面
      

  6.   

    说道这个份上应该会解决了啊,既然你都知道了哪一行开始应该到另一个dgv,那就把数据源相应的索引之后的数据分到另一个dgv就可以了,那就这么解决啊!