没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2007-07-18 10:09:36.000|阅读 1401 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
asp.net 的 GridView 只能进行单行编辑(设置 EditIndex),相比之下,这个控件则可以进行多行同时编辑。同时还能进行多行插入。再配合 DataSource 控件,真的比较好用。
1:配合 DataSource 控件使用
2:多行编辑
3:多行插入
4:处理修改/插入事件
5:分页
6:模板的使用
7:小扩展
这是一个运行效果图。
这是下载地址:http://www.codeplex.com/ASPNetRealWorldContr/Release/ProjectReleases.aspx?ReleaseId=1674
配合使用Datasource控件。
再提供的例子里面,数据源使用的是 SqlDataSource 控件。配置好 sql 语句就可以了。因为我的用例里面多数都是使用 ORM的,所以我用了另外一种 DataSource 控件。这个数据源控件的好处是对分页支持非常好,可以直接内置在对象的sql语句里面,真的可以做到数据库分页和 UI 分页结合。
因为设计的关系,如果不使用 DataSource 控件,将很难使用到多行插入的功能。
private void InsertRow(int rowIndex, bool causesValidation)
{
GridViewRow row = null;
if ((!causesValidation || (this.Page == null)) || this.Page.IsValid)
{
DataSourceView dsv = null;
bool useDataSource = base.IsBoundUsingDataSourceID;
if (useDataSource)
{
dsv = this.GetData();
if (dsv == null)
{
throw new HttpException("DataSource Returned Null View");
}
}
}
}
多行编辑
其实这个控件把所有行都变成了编辑状态。这种用例可能在某些场合非常有用。
BulkEditGridView 直接提供一个 DirtyRows 的属性,把修改行触发事件。
protected void BulkEditGridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//user logic here.
string s = e.NewValues["Manhour"].ToString().Trim();
if (s == "0" || s == "")
e.Cancel = true; //can do the cancel here.
else
{
e.NewValues["Amount"] = 100;//test reset some value
}
}
这样,就可以得到数据了。
如果不使用 Datasource 控件,需要做些特别的处理
if (EditableGrid.DirtyRows[EditableGrid.DirtyRows.Count-1].RowIndex == e.RowIndex)
BindData();
这样做的原因是:修改完成之后要重新绑定数据,而这个事件会被重复触发,所以一定要判断出来是不是最后一次触发这个事件,要不然直接绑定新数据的话会把其他行覆盖掉。
多行插入
这个功能看起来比较有意思:一个 GridView 下边会有多个新行以供用户书写新的数据。用户可以设置现实多少个新行。
不过这个功能感觉多有不方便的地方。比方说:
在提供的新的事件里面,我们可以处理插入:
protected void BulkEditGridView1_RowInserting(object sender, RealWorld.Grids.GridViewInsertEventArgs args)
{
string s = args.NewValues["Manhour"].ToString().Trim();
if (s == "0"||s=="")
args.Cancel = true;
else
{
//args.Row is my new GridViewInsertEventArgs property.
DropDownList list = args.Row.FindControl("DropDownList1") as DropDownList;
string x = list.SelectedValue;
}
}
注意:上边的 args.Row 是我自己扩展出来的。
这个事件也会循环触发。
分页
我使用的是一个 DataSource 控件,所以处理分页正好使用。因为 BulkEditGridView 控件本身就继承自 GridView,所以分页,排序等功能继续使用没有问题。
模板列
GridView 的模板列可以继续使用。但是在 InsertRow 的时候需要自己做一些扩展(原因就是上边说的无法得到当前事件 Row 的参数的问题)。
this.InnerTable.Rows.AddAt(index, row);附近,自行触发一个事件。
这种情况可能出现在:设置了模板,但是无法控制 InsertRow 里面的某些非数据绑定控件(Dropdownlist或者其他)。
其他
DropDownField 类:这是提供的一个可以绑定列表的绑定列。类似的自己可以扩展其他绑定列。
附,扩展之后的 GridViewInsertEventArgs 类
GridViewInsertEventArgs
public class GridViewInsertEventArgs : CancelEventArgs
{
private int _rowIndex;
private IOrderedDictionary _values;
private GridViewRow _row;
public GridViewInsertEventArgs(int rowIndex)
: base(false)
{
this._rowIndex = rowIndex;
}
/**//// <summary>
/// new method, to expose the current row
/// </summary>
/// <param name="row"></param>
public GridViewInsertEventArgs(int rowIndex,GridViewRow row)
: base(false)
{
this._rowIndex = rowIndex;
this._row = row;
}
/**//// <summary>
/// Gets a dictionary containing the revised values of the non-key field name/value
/// pairs in the row to update.
/// </summary>
public IOrderedDictionary NewValues
{
get
{
if (this._values == null)
{
this._values = new OrderedDictionary();
}
return this._values;
}
}
/**//// <summary>
/// Gets a dictionary containing the revised values of the non-key field name/value
/// pairs in the row to update.
/// </summary>
public GridViewRow Row
{
get
{
return this._row;
}
set {
this._row = value;
}
}
/**//// <summary>
/// Gets the index of the row being updated.
/// </summary>
public int RowIndex { get { return this._rowIndex; } }
}
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号