CustomDataGrid

    [ToolboxBitmap(typeof(DataGrid))]
public partial class CustomDataGrid : DataGrid
{
private DataSet _myDataSource=null; //数据源
private int _columnNum = 10; //每行显示的列数
private static int pageNum = 1;


private int CAPTIONHEIGHT = 21;
private int BORDERWIDTH = 2;



[DefaultValue(typeof(Int16), "10"), Description("每页显示的列数")]
public int ColumnNum
{
get { return _columnNum; }
set
{
_columnNum = value;
base.Invalidate();
}
}

/// <summary>
/// 自定义数据源
/// </summary>
public DataSet MyDataSource
{
get { return _myDataSource; }
set
{
_myDataSource = value;
this.DataSource = getTopNum(MyDataSource, ColumnNum * pageNum);
}
}



public CustomDataGrid()
{
InitializeComponent();
pageNum = 1;
this.VertScrollBar.Visible = true;
this.VertScrollBar.VisibleChanged += new EventHandler(ShowScrollBars);
this.VertScrollBar.Scroll+=new ScrollEventHandler(VertScrollBar_Scroll);
}
/// <summary>
/// 滚动条事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void VertScrollBar_Scroll(object sender, ScrollEventArgs e)
{
if (MyDataSource != null)
{
if (e.NewValue > e.OldValue)
{
pageNum++;
int num = ColumnNum * pageNum; //将要显示的条数
this.DataSource = null;
this.DataSource = getTopNum(MyDataSource, num);
}
}
}
/// <summary>
/// 始终显示滚动条
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ShowScrollBars(object sender, EventArgs e)
{
if (!this.VertScrollBar.Visible)
{
int width = this.VertScrollBar.Width;
this.VertScrollBar.Location = new Point(this.ClientRectangle.Width - width - BORDERWIDTH, CAPTIONHEIGHT);
this.VertScrollBar.Size = new Size(width, this.ClientRectangle.Height - CAPTIONHEIGHT - BORDERWIDTH);
this.VertScrollBar.Show();
}
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}

/// <summary>
/// 动态的加载数据
/// </summary>
/// <param name="dataSource"></param>
/// <param name="num"></param>
/// <returns></returns>
private DataTable getTopNum(DataSet dataSource, int num)
{
//this.
if (num <= 0)
{
num = 10;//默认显示的条数
}
if (dataSource != null)
{
DataTable dataTable = new DataTable();
DataTable table = dataSource.Tables[0];
dataTable = ((from s in table.AsEnumerable() select s).Take(num)).CopyToDataTable();
return dataTable;
}
else
{
return null;
}
}

}
posted on 2011-10-11 11:05  小谈  阅读(281)  评论(0)    收藏  举报