自定义PageDataGridView类的一点问题

lkhoji 2011-02-18 12:17:33
搜来的一个自定义PageDataGridView类,该类由外部数据源变化事件(PageDataGridview.DataSourceChanged)触发更新。想添加1个功能,当数据源大量更新时,禁止该类外部触发事件,数据源更新结束后重新启用禁止的事件,并更新一次。没有写过类不知道如何写这样的代码,求代码。谢谢!

说明:下面代码是有VB.NET转换来的(更新事件)部分代码,VB.NET板块升级,不能发帖!



private void PageDataGridview_DataSourceChanged(object sender, System.EventArgs e)
{
DataGridView dgv = (DataGridView)sender;
bool filledFlag = false;

if (((DataTable)dgv.DataSource).Rows.Count > 0) {
ToltalPage = 1;
NowPage = 1;
if (PageSize == 0) {
return;
}
DataTable table = (DataTable)dgv.DataSource;
int tol = table.Rows.Count;
int temptolpage = Convert.ToInt32(tol / PageSize);
if (temptolpage * PageSize >= tol) {
ToltalPage = temptolpage;
} else {
ToltalPage = temptolpage + 1;
}
nowrowno = 0;
ds.Tables.Clear();

//建立所有分页,并添加到数据集 ds
for (int tbcount = 0; tbcount <= ToltalPage - 1; tbcount++) {
DataTable tempTable = new DataTable();
var _with1 = ((DataTable)dgv.DataSource);
//为 tempTable 添加列名称
for (int i = 0; i <= _with1.Columns.Count - 1; i++) {
DataColumn col = new DataColumn();
col.ColumnName = _with1.Columns(i).ColumnName;
tempTable.Columns.Add(col);
}
//创建分页表 tempTable
for (int s = 1; s <= PageSize; s++) {
if (nowrowno == _with1.Rows.Count) {
break; // TODO: might not be correct. Was : Exit For
}
tempTable.ImportRow(_with1.Rows(nowrowno));
nowrowno += 1;
}
ds.Tables.Add(tempTable);
//将分页添加到数据集
}

var _with2 = ((DataTable)dgv.DataSource);
//把 ds 中第一个表复制到 dgv
if (ds.Tables.Count > 0) {
_with2.Rows.Clear();
foreach (DataRow row in ds.Tables(0).Rows) {
_with2.ImportRow(row);
}
}

}
}


加下面代码不行

public void UpData()
{
this.DataSourceChanged -= PageDataGridview_DataSourceChanged;
}
public void EndUpData()
{
this.DataSourceChanged += PageDataGridview_DataSourceChanged;
PageDataGridview_DataSourceChanged(null, null);//会引起未实例化错误
}
...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkhoji 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lkhoji 的回复:]
这个问题看来有点难度啊。
我搞不清楚,0楼代码:DataGridView dgv = (DataGridView)sender;
中sender是怎么起作用的,如果能替换一下这行代码,不用sender就喊办了。
[/Quote]
中sender是怎么起作用的,如果能替换一下这行代码,不用sender就好办了。
lkhoji 2011-02-18
  • 打赏
  • 举报
回复
这个问题看来有点难度啊。
我搞不清楚,0楼代码:DataGridView dgv = (DataGridView)sender;
中sender是怎么起作用的,如果能替换一下这行代码,不用sender就喊办了。
ruanwei1987 2011-02-18
  • 打赏
  • 举报
回复

110,475

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧