求段代码类,继承 GridView 的类,里面能默认添加两模板列CheckBox和LinkButton列

Jonly 2009-06-11 07:09:47
  求一段代码类,该类是继承 GridView 的类,做成自定义控件也可以;
  里面默认添加两模板列,一列带CheckBox控件的,另一列带LinkButton控件的;或者传一些参数可任意添加模板列的最好。

  谢谢!
...全文
259 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
mimixia88 2012-03-08
  • 打赏
  • 举报
回复
借鉴四楼的。。
shenweiblue 2009-06-15
  • 打赏
  • 举报
回复
ding
yaojojo8265173 2009-06-14
  • 打赏
  • 举报
回复
学习学习。
knifesky 2009-06-13
  • 打赏
  • 举报
回复
//=========================ButtonField==============================
5,ButtonField:按钮列,可在列中放置一个按钮
ButtonType:按钮的类型,Link就是LinkButton,在网页上显示一个超级链接,Button,在网页上显示一个按钮,Image,在网页上显示一个图像按钮
ImageUrl:当ButtonType为Image时显示的图片
CommandName:命令名,可通过命令名区分每个按钮的功能,因为GridView控件中所有的按钮在后台都对应同一个事件RowCommand,所以我们必须设置CommandName属性来区别我们点击的是哪一个按钮,执行哪些操作。
注意:你无法在控件中通过双击按钮来进入按钮的点击事件。

好吧,下面我们来使用按钮列来实现删除某条数据。
我们添加了一个按钮列,Text为“删除”,CommandName设置为“del”

在GridView的RowCommand事件中编写如下代码:

//首先我们通过我们设置的CommandName属性来判断点击的是哪个按钮
if (e.CommandName == "del")
{
//接下来我们可以通过e.CommandArgument来获取当前点击的是哪一行
int rowindex = Convert.ToInt32(e.CommandArgument);
//接下来我们像操作DataTable一样,通过行号和列号来获得我们需要的借书证号
string jszh = Gv1.Rows[rowindex].Cells[0].Text;
//好吧,下面我们根据获取的这个借书证号把数据库中的数据删除掉
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("", con);
cmd.CommandText = "delete from 读者表 where 借书证号='" + jszh + "'";
con.Open();
cmd.ExecuteNonQuery();
con.Close();
//接下来在重新绑定GridView
}

这里可能同学认为通过Gv1.Rows[rowindex].Cells[0].Text获取值有些太麻烦了,而且我们还得记住列的标号,而且我们还不得不把该列添加在控件上,这样的话,如果我们显示列的顺序发生改变,我们不得不重新修改程序。

那这里,我们可以采用另外一种方式存放我们数据库中的主键,或者一些主要的字段,然后我们通过一种简单的,或者更直接的方式获取值。

首先,我们找到GridView的DataKeysName属性,然后我们把我们需要的关键数据的字段填写在属性中(多个字段以“,”分开),然后我们就可以通过Gv1.DataKeys[行号]["字段名"]的方式获取值了,使用前注意类型装换。
//=======================CheckBox============================
效果三:全选删除、多选删除

实现全选、删除的方式有很多,我们这里介绍一下通过循环方式获取GridView中行中记录的方式实现。

首先我们像上个例子一样将读者表中的数据绑定到GridView中,并在最前添加一个模板列,其中我们放入一个CheckBox控件,ID设置为Cb_sel
然后我们在页面上添加一个按钮,在点击事件中实现全选,当然,这里最好的方式是放置一个CheckBox控件,根据控件的选中状态设置是否全选、还是取消全选。
在页面放置一个CheckBox控件,设置其ID为Cb_all,AutoPostBack属性为True,并在其CheckedChanged事件中编写选中代码,同样根据循环方式
for (int i = 0; i < Gv1.Rows.Count; i++)
{
CheckBox cb_s = (CheckBox)Gv1.Rows[i].FindControl("Cb_sel");
//设置复选框的选中状态与全选复选框的状态一致
//这样就实现了全选和全取消
cb_s.Checked = Cb_all.Checked;
}

接下来我们放入一个删除按钮,实现多选删除,这个按钮的实现代码与全选基本一直,就是循环GridView中的每一行,然后获取其第一个格中的复选按钮,然后判断其选中状态,如果是选中的话,则实现删除。
for (int i = 0; i < Gv1.Rows.Count; i++)
{
CheckBox cb_s = (CheckBox)Gv1.Rows[i].FindControl("Cb_sel");
if (cb_s.Checked)
{
//执行删除操作
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("", con);
string jszh = Gv1.Rows[i].Cells[1].Text;
cmd.CommandText = "delete from 读者表 where 借书证号='" + jszh + "'";
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
//删除后调用绑定方法
BindGrid();

当然,我们应该在事务中执行删除操作,这样便可以保持数据的完整性。

这里,我们对GridView中模板列的介绍基本完成,其实模板列还可以实现更加复杂的功能,就靠大家自己开发了。

待续...
//==================================================================
以上是我课件中的一部分,其中包括按钮列和使用复选按钮实现全选和批量删除,供你参考!
zhang300521 2009-06-12
  • 打赏
  • 举报
回复
学学 学来
Jonly 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 seamanhy 的回复:]
GridView直接可以添加用于想要的控件进去的,为何自己还要重新写一个呢?
[/Quote]

15 楼说的是放到 用户控件里 就需重写事件了!
seamanhy 2009-06-12
  • 打赏
  • 举报
回复
GridView直接可以添加用于想要的控件进去的,为何自己还要重新写一个呢?
Jonly 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 boylee83 的回复:]
把gridview拖到用户控件里,最简单。
[/Quote]

那样数据源绑定,很多事件要重写,好象会更麻烦!
  • 打赏
  • 举报
回复
把gridview拖到用户控件里,最简单。
simplePJlife 2009-06-12
  • 打赏
  • 举报
回复
linkbutton同理。 楼上所说的devexpress 已经发展到 developer express 2009 vol 1 版本了哦。 功能确实很简单, 但是有DEMO和视频, 学习起来也是很快的。
simplePJlife 2009-06-12
  • 打赏
  • 举报
回复
只要一个模板列? 这不很简单的麻。

点GRIDVIEW右上的三角,选择列追加,-- 然后选择 Templatefield.

再点 teTemplate编辑,选中你要追加的那列ITEMteTemplate( 这个是 显示模式),然后拉CHECKBOX控件进来。OK
Jonly 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yan286093636 的回复:]
想实现什么样的功能呢?非要这样写,GridView的功能我觉得已经够用了,
非要要的话,我星期一来了给代码,周末回家瞅瞅。。。。。。。。
[/Quote]


谢谢你, 这样会省很多事,不用每一页都去加这固定的两列。
yan286093636 2009-06-12
  • 打赏
  • 举报
回复
想实现什么样的功能呢?非要这样写,GridView的功能我觉得已经够用了,
非要要的话,我星期一来了给代码,周末回家瞅瞅。。。。。。。。
Jonly 2009-06-12
  • 打赏
  • 举报
回复

谢 9 楼的

devexpress 感觉大了,我只要这一个功能而已!
nosuchtracter 2009-06-12
  • 打赏
  • 举报
回复
devexpress
这家公司的控件肯定适合你
hy_lihuan 2009-06-12
  • 打赏
  • 举报
回复
你在一个页面用代码怎么去加这两个模板列,把这些代码转移到继承的类里面的OnLoad事件中看看
happy664618843 2009-06-11
  • 打赏
  • 举报
回复
利用接口可以实现继承模板列啊!
Jonly 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wuyq11 的回复:]
参考
参考
[/Quote]

谢谢4楼的,里面相关的文章我都看到过,但是就是没有在里面添加模板列的 !!
makun0624 2009-06-11
  • 打赏
  • 举报
回复
UP`
wuyq11 2009-06-11
  • 打赏
  • 举报
回复
加载更多回复(3)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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