zoukankan      html  css  js  c++  java
  • c1FlexGrid 冻结列 和冻结行

        // 冻结列

                c1FlexGrid1.Cols.Frozen = 3;

        // 冻结行

                c1FlexGrid1.Rows.Frozen = -1;

    冻结最后一行,和最右边列.的方法,已经找到,研究一下,成功了再贴上来!Oh Yeah!...

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using C1.Win.C1FlexGrid;
    
    namespace FlexFreezeBottomSample
    {
    	/// <summary>
    	/// 
    	/// FlexFreezeBottom
    	/// 
    	/// This is a control (derived from Panel) that contains a FlexGrid. The
    	/// contained FlexGrid is positioned with a negative Y coordinate within 
    	/// the panel so that the fixed rows are not visible.
    	/// 
    	/// The contained grid is also sized and scrolled via code so that the 
    	/// bottom 'n' rows are visible.
    	/// 
    	/// The contained grid is bound to a main FlexGrid and therefore shares 
    	/// the underlying grid model (data, layout, styles, selection, etc).
    	/// 
    	/// The whole control (panel and contained grid) is attached to the main 
    	/// FlexGrid and positioned at its bottom. This way, the control always
    	/// shows the bottom 'n' rows of the main grid.
    	/// 
    	/// </summary>
    	internal class FlexFreezeBottom : Panel
    	{
    		private C1.Win.C1FlexGrid.C1FlexGrid _frz;
    		private C1.Win.C1FlexGrid.C1FlexGrid _main;
    		private int  _rows;
    		internal FlexFreezeBottom(C1.Win.C1FlexGrid.C1FlexGrid main, int rows)
    		{
    			// save info we'll need later
    			_main = main;
    			_rows = rows;
    
    			// create child grid with frozen bottom rows
    			_frz = new C1.Win.C1FlexGrid.C1FlexGrid();
    			_frz.ScrollBars = ScrollBars.None;
    			_frz.BorderStyle = C1.Win.C1FlexGrid.Util.BaseControls.BorderStyleEnum.None;
    			_frz.DrawMode = DrawModeEnum.OwnerDraw;
    			_frz.OwnerDrawCell += new C1.Win.C1FlexGrid.OwnerDrawCellEventHandler(_frz_OwnerDrawCell);
    			_frz.SetupEditor   += new C1.Win.C1FlexGrid.RowColEventHandler(_frz_SetupEditor);
    			_frz.AfterScroll   += new C1.Win.C1FlexGrid.RangeEventHandler(_frz_AfterScroll);
    			_frz.GridChanged   += new C1.Win.C1FlexGrid.GridChangedEventHandler(_main_GridChanged);
    			Controls.Add(_frz);
    
    			// bind frozen grid to main grid (share data, layout, styles, selection)
    			_frz.DataSource = main;
    
    			// add this to the main grid
    			main.Controls.Add(this);
    
    			// hook up the events we need to synchronize with the main grid
    			main.Resize      += new System.EventHandler(_main_Resize);
    			main.AfterScroll += new C1.Win.C1FlexGrid.RangeEventHandler(_main_AfterScroll);
    			main.SelChange   += new System.EventHandler(_main_SelChange);
    			main.GridChanged += new C1.Win.C1FlexGrid.GridChangedEventHandler(_main_GridChanged);
    
    			// initialize
    			AdjustLayout();
    		}
    
    		internal void AdjustLayout()
    		{
    			// get index of the bottom (frozen) rows
    			RowCollection rows = _main.Rows;
    			int r2 = rows.Count-1;
    			int r1 = r2 - _rows + 1;
    			if (r1 <= rows.Fixed) r1 = rows.Fixed;
    
    			// hide control if the main grid is big enough
    			Visible = (r1 <= r2);
    			if (!Visible) return;
    
    			// set control size and location
    			Rectangle rc = _main.ClientRectangle;
    			if (rows[r2].Bottom <= rc.Bottom)
    			{
    				Visible = false;
    				return;
    			}
    			int hei = rows[r2].Bottom - rows[r1].Top + 1;
    			rc.Y = rc.Bottom - hei;
    			rc.Height = hei;
    			Bounds = rc;
    
    			// adjust child grid to hide fixed rows
    			rc = ClientRectangle;
    			hei = rows[rows.Fixed + rows.Frozen].Top;
    			rc.Y -= hei;
    			rc.Height += hei;
    			_frz.Bounds = rc;
    
    			// syncronize scroll position
    			SynchScrollPosition(false);
    		}
    		internal void SynchScrollPosition(bool synchMain)
    		{
    			Point pos;
    
    			// optionally synchronize X scroll position on the main grid
    			if (synchMain)
    			{
    				pos = _frz.ScrollPosition;
    				pos.Y = _main.ScrollPosition.Y;
    				_main.ScrollPosition = pos;
    			}
    
    			// syncronize X scroll position of the frozen grid with main
    			pos = _main.ScrollPosition;
    			pos.Y = -64000;
    			_frz.ScrollPosition = pos;
    
    			// update everything right away
    			_main.Update();
    			_frz.Update();
    		}
    
    		// make normal and scrollable areas look different
    		// (when painting and when editing)
    		private void _frz_OwnerDrawCell(object sender, C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
    		{
    			if (e.Style.BackColor == _frz.Styles.Normal.BackColor)
    			{
    				e.Graphics.FillRectangle(Brushes.Beige, e.Bounds);
    				e.DrawCell(DrawCellFlags.Border | DrawCellFlags.Content);
    			}
    		}
    		private void _frz_SetupEditor(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
    		{
    			_frz.BackColor = Color.Beige;
    		}
    
    		// adjust layout after resizing the main grid (our container)
    		private void _main_Resize(object sender, System.EventArgs e)
    		{
    			AdjustLayout();
    		}
    
    		// synchronize scrolling
    		private void _main_AfterScroll(object sender, C1.Win.C1FlexGrid.RangeEventArgs e)
    		{
    			SynchScrollPosition(false);
    		}
    		private void _frz_AfterScroll(object sender, C1.Win.C1FlexGrid.RangeEventArgs e)
    		{
    			// if the frozen grid has the focus and the user selects non-frozen
    			// cells, scroll main grid up.
    			if (_frz.Focused)
    			{
    				int row = Math.Min(_frz.Row, _frz.RowSel);
    				int bot = _main.Rows[row].Bottom + _main.ScrollPosition.Y;
    				if (bot > Top)
    				{
    					// unless this is a mouse selection, give focus to main grid
    					if (!_frz.Capture) _main.Focus();
    					_main.TopRow = _main.Row;
    				}
    			}
    			SynchScrollPosition(true);
    		}
    
    		// scroll while selecting
    		// if the user extends the selection down on the main grid, scroll it down.
    		private void _main_SelChange(object sender, System.EventArgs e)
    		{
    			// only when the main grid has the focus!
    			if (!_main.Focused) return;
    
    			// calculate selection bottom (accounting for scrolling)
    			int row = Math.Max(_main.Row, _main.RowSel);
    			int bot = _main.Rows[row].Bottom + _main.ScrollPosition.Y;
    
    			// try scrolling if past the bottom of the frozen area
    			if (bot > Top) _main.TopRow++;
    		}
    
    		// adjust layout after massive changes (resize rows/cols, sort, etc)
    		private void _main_GridChanged(object sender, C1.Win.C1FlexGrid.GridChangedEventArgs e)
    		{
    			switch (e.GridChangedType)
    			{
    				case GridChangedTypeEnum.GridChanged:
    				case GridChangedTypeEnum.LayoutChanged:
    					AdjustLayout();
    					break;
    			}
    		}
    	}
    }
    

      主要是这个类.

    然后有相应的 这段代码来 进行 c1flexGrid 底部冻结

     _flex.AllowFreezing = AllowFreezingEnum.Both;

       // bind main grid to Customers table   

       Bind("select * from customers");

       // create frozen area at the bottom, with 3 rows   

     FlexFreezeBottom ffb = new FlexFreezeBottom(_flex, 3);

  • 相关阅读:
    MySQL "show users"
    MySQL
    A MySQL 'create table' syntax example
    MySQL backup
    MySQL show status
    Tomcat, pathinfo, and servlets
    Servlet forward example
    Servlet redirect example
    Java servlet example
    How to forward from one JSP to another JSP
  • 原文地址:https://www.cnblogs.com/wuyifu/p/2566330.html
Copyright © 2011-2022 走看看