关于datagrid中模板列的问题,欢迎大家前来讨论,发表自己的看法。。。

luohzad 2003-07-18 10:07:25
问题一:
有人认为如果datagrid中有一列或者是多列使用了模板,datagrid中最好全部都使用模板,否则可能以后在运行的时候会有问题?

问题二:
在datagrid中,如果有一列是模板列,其中itemTemplate中存放的是label,在运行时用来显示内容。在EditTemplate中放dropdownlist控件,用于编辑的时候进行更改其内容,问题:如何在点击编辑后,使得dropdownlist中(编辑状态下)的内容是label中(不是编辑状态下)的值。

问题三:
有模板的情况下,都是使用findcontrol("controlid")来找到其控件,不过有时前面出现的e 具有不同的意义。
如:DataGrid1_EditCommand中e.Item.FindControl("controlid");
DataGrid1_ItemDataBound中e.Item.FindControl("controlid")
说说“e”的不同意义。
...全文
14 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhongkeruanjian 2003-09-15
  • 打赏
  • 举报
回复
我来说两句吧
关于模板列与一般列的实现原理都是一样的
1。一般列声明以后,DATAGRID会把列里面的控件ADD到DATAGRIDITEM的CONTROLS,要加在IITEMPLATE中然后`IITEMPLATE会调用InstantiateIn方法,在这个方法里,IITEMPLATE会把在其中声明的控件ADD到DATAGRIDITEM的CONTROLS里,所以说,一般列和模板列没什么不同。
2。模板列由于可以任意的添加控件,所以要处理控件的事件和数据绑定就是最重要,最麻烦的了,
比如说DATAGRID的COMMMAND列,由于Command控件的多少的不确定性,所以用的是DATAGRIDITEM里的BULLTE方法,把COMMAND控件的事从BULLTE方法里冒泡出来,然后通过DATAGRID一直传递到.ASPX。并且同过COMMANDNAME来判断是那个按钮在CLICK,所以在声明模板列里的按钮时,你必须指明其COMMANDNAME,不然这个按钮系统就没办法找到,但是一般的控件这么办呢,比如说CHECKBOX的CHANGED事件,那又怎么传递出来呢,它的数据绑定怎么办呢(常常要根据DATASOURCE的某一列的值来初始化CHECKBOX是CHECKED为True还是False,)这一般都要自定义IITEMPLATE,
并自定义TEMPLATECOLUMN,很麻烦,查资料可得
greystar 2003-07-18
  • 打赏
  • 举报
回复
问题一:没遇到过

2: 我一般都处理为itemcommand事件,给它取个名commandname="xxx" 在itemcommand事件里判断一下commandname=="xxx" 就可以了

3我也没遇过
visualcpu 2003-07-18
  • 打赏
  • 举报
回复
1、你的第一个问题我不赞同,我经常做一个模板列,其它不做模板列。根据自己需要来定。

2、你在DataGrid的EditCommand事件里利用找控件的方法找到相应的值,再互相赋值就行了

3、EditCommand中的e.Item.FindControl("controlid")是找到处于编辑下的控件。
DataGrid1_ItemDataBound中e.Item.FindControl("controlid")是找dataGrid里不处于编辑时的控件,比如你可以获得dataGrid页脚等!
jeffrey_rui 2003-07-18
  • 打赏
  • 举报
回复
1.没问题
redfoxhuang 2003-07-18
  • 打赏
  • 举报
回复
我的看法
问题一,其实绑定列,按钮列都可以看成是模板列的特例(就是已做成的模板),用模板列更灵活,更易扩展,至于混用的问题,我们公司做的系统很多都是这样的,用了快一年,还没有碰到过问题,不知道别的朋友有没有碰到过
问题二,在你的编辑状态触发事件里面写,比如你触发的是editcommand,就在里面写,如果是
itemcommand,就在itemcommand里面写
比如
private void DataGrid1_editCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
Label Label1=(Label)e.Item.findcontrl("那个datagrid中的label id");
dropdownlist ddlist=(dropdownlist)e.Item.findcontrl("那个datagrid中的dropdownlist id");
然后就像平常一样付值就行了
}
问题3 具体意义在vs.net中对e按F1,那里面解释很清楚
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2003-07-18 10:07
社区公告

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

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