Posted on 2007-04-22 20:45
webabcd 阅读(21289)
评论(125) 编辑 收藏
Feedback
如果把 private const int _firstEditCellIndex = 1;设成1下面这两句就会提示超出范围。你有试过吗/
Control _displayControl = _gridView.Rows[e.RowIndex].Cells[i].Controls[1];
Control _editControl = _gridView.Rows[e.RowIndex].Cells[i].Controls[3];
好像看到他一定要保留一列不给编辑,否则就会在查找控件的时候出错,超出范围。
@ivw
CommandName="Edit",就是现实编辑模板,看看你的编辑模板里怎么写的,就知道了
那是因为你的索引为1的这个单元格没有文中所谓的显示控件或编辑控件
本文的示例并不通用,需要具体需求做具体修改
文中示例的第一列其实就是按钮
不错。
如果能做到批量提交就更好了。每次可以编辑很多行,然后一次性提交
页面的数据量会稍微大一些,但是我想没关系。只要做好分页,也不会达到哪里去。
对,这种方法只合适单个单元格编辑使用,而且如果数据量大对速度影响很大。如果能做到像Winform的grid那样就完美了,呵呵
@随心所欲
@ivw
肯定是可以,曾经做过一个有相似需求的项目
我的实现方法是这样
在客户端对table编辑还算是简单,更新相关td的innerHTML就行了,插入行删除行用js也都能实现
把所有对table的更新放到js的dom中,然后与一个hiddenfield同步,然后提交后批量更新数据库
@ivw
公司项目,不能放上来啊
原理就如我上面所说的
兄弟想要实现的话
google一下js操作table以及js的dom,把这两个搞通了,实现那个功能就小case了
我的意思是说如果列中用的是checkbox或下拉框,那用js怎样编辑table啊?
@ivw
原来我做的都是文本的,哈
如果给td增加checkbox或下拉框,我觉得一样是设置td的innerHTML
如果是下拉的话就要读库中的资料那怎么办啊,编辑TD的时候读库很麻烦的啊。
还有啊,兄弟,一直都想问问你,自己写的控件库怎么做才能不给别人随便调用啊?
@ivw
既然想全客户端的就尽量不读数据库,不用ajax
有下拉的话就要在起初加载的时候把数据放到页面上
写的库不让别人调用?那就让你库里的所有类都继承自一个基类,然后在这个基类里按mac之类的做判断
要想不让别人篡改就用snk
这样做是不是别人不能从工具栏那里添加自己写的DLL来调用控件啊?
@ivw
控件的话就在构造函数里判断mac之类的,以决定让谁用
判断网卡MAC地址啊?继承自一个基类,他半身要继承例如Controls这样的类,还可以再继承其它类吗?
@ivw
单纯类库的话最好继承自一个基类
控件的话写在构造函数里就ok了
判断mac还是cpu序列号之类的要看你的需求了
有个问题就是,如果使用WMI取硬件的信息很多时候会出现问题。你有API取mac或cpu序列号的资料吗?
@ronglj
测试过,没问题的
看看sqlserver2005 express的服务启没启
程序没问题的,我试过了,他本来用的是SQL2005,如果你机上的是SQL2000就要把连接串改,还 有表名也要改的。
兄弟,有个菜问题问问你。自定义控件的构造函数在那啊?
@ivw
以我写的扩展GridView为例
public class SmartGridView : GridView
{
public SmartGridView()
{
// 构造函数
}
}
如果是这样,那不是要每个控件里都做判断吗?如果判断硬件信息的话那如果把程序放到其它机上就用不了啦?
@ivw
是这样的
你不是不想让别人用吗,那要根据一些信息判断啊
请问为什么我在gridview控件里做了行的单击事件,用ajax调用后台进行select,如果查找带return的话他会做两次的select操作啊?gridview控件放在UpdatePanel控件里。
@ivw
是用数据源控件吗?数据源控件会自动select的,所以你自己再select的话就是两遍
是用数据源,但如果我没有返回值他就不会select两次了。有办法解决吗
但他出现两次的不是数据源那条sql语句,而是我调用时使用的sql语句。
刚才我跟踪多次发现问题可能出现在Fill()跟ExecuteNonQuery()这里的问题,他们各自都要select一次,把数据填充到dataset里除了Fill()还有什么更好的办法啊?
@ivw
兄弟确实奇怪的问题
填充到dataset,用fill是最简单的了
不过现在很少写数据层的代码了,因为用.net 2.0里的强类型dataset和datatableadapter实在是太简单了
呵呵 ,兄弟有没有NetAdvantage 2006 的破解啊?我想要里面的那个grid控件啊,web的grid控件实在太基本了。或者有没有其它更好的grid控件啊?
有没有其它更好的grid控件啊?最好是像winform那个grid差不多的。
请问兄弟,用JS怎样帮 ObjectDataSource 控件里的某个Parameter 中的DefaultValue 赋值啊?如下,怎样在js里重新赋值给DefaultValue啊?
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select" TypeName="CommandCS">
<SelectParameters>
<asp:Parameter DefaultValue="select * from temp" Name="sqltxt" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
@ivw
这样的grid就算有也肯定是收费的吧,我是没有
别想用js控制ObjectDataSource了
因为ObjectDataSource不会解析到客户端
哦,
ObjectDataSource那里我找到其它办法了。谢谢了。
我直接引用了你的DLL文件,把一个gridview放到WEBFORM里.
然后编辑里面的两个按钮事件,为什么运行的时候单击gridview没反映呢?似乎并没有和按钮的事件绑定...
@周
设置GridView的OnRowCommand
然后在codebehind的RowCommand里捕获按钮的点击事件
为什么我只需要对一列编辑,则会出现index出错呢。
Control _displayControl = _gridView.Rows[j].Cells[i].Controls[1];---该处出错
Control _editControl = _gridView.Rows[j].Cells[i].Controls[3];
@dunzimu
那是因为你的索引为1的这个单元格没有文中所谓的显示控件或编辑控件
本文的示例并不通用,需要具体需求做具体修改
if (this.GridView1.SelectedIndex > -1)
{
this.GridView1.UpdateRow(this.GridView1.SelectedIndex,false);
}
if (this.GridView1.SelectedIndex > -1)
{
this.GridView1.UpdateRow(this.GridView1.SelectedIndex,false);
} 这段代码,我怎么在page_Load里怎么不能获得this.GridView1.SelectedIndex
if (this.GridView1.SelectedIndex > -1)
{
this.GridView1.UpdateRow(this.GridView1.SelectedIndex,false);
} 这段代码,我怎么在page_Load里怎么不能获得this.GridView1.SelectedIndex ,selectedindex始终都没有获得索引
@迷失者
不要在Page_Load里写
应该写在GridView的SelectedIndexChanged里
SelectedIndexChanged
这个事件,根本没有激发,是不是哪里还得设置一下。。
_firstEditCellIndex这个变量,楼主你是在哪里定义
@学习者
并没有把所有代码都贴出来
因为太长了
提供下载的源代码里有
问题是 好像更改后必须点击GRIDVIEW区域 才能更新
@拒绝潜水的鱼
是的
因为这里
string _jsSingle = ClientScript.GetPostBackClientHyperlink(_singleClickButton, "");
单击单元格才会回发
可以改一下
@szliu
代码里有这句的
只不过这里贴的只是关键代码
要看全部代码的话请下载源码
运行到"// 获得被选中单元格的显示控件并设置其不可见
Control _displayControl = _gridView.Rows[_rowIndex].Cells[_columnIndex].Controls[1];"报这个错误
“索引超出范围。必须为非负值并小于集合大小。
参数名: index”
运行到"// 获得被选中单元格的显示控件并设置其不可见
Control _displayControl = _gridView.Rows[_rowIndex].Cells[_columnIndex].Controls[1];"报这个错误
“索引超出范围。必须为非负值并小于集合大小。
参数名: index”
你没重新绑定数据
@安抚
:)
是指我提供的那个demo吗?
没有那个问题啊
NONONO 我说的是84的楼的问题
再次感谢你 嘿 刚好经理要我们坐类似的东西 你的源代码很好 帮了大忙了
您好,有个问题请教下,你给的demo中MasterDetail那个页面的功能
如果主表的GRIDVIEW有多列的话 从表的GIRDVIEW应该怎么放 才能让格式不乱呢
我想在主GRIDVIEW行的下面显示从GRIDVIEW,如果把从GRIDVIEW放在一个列里的话,显示的时候包含它的主GRIDVIEW列太宽了,而且其他列都是空白,难看死了
@安抚
那就这么解决
单击行后,行下面插入一行合并了所有单元格的行
然后在这个行中加入子GridView
当然可能也有别的解决办法,google一下应该会很有收获
每次点击单元格都要刷新 要是无刷新的就好了 嘿 能AJAX来实现无刷新么?
@sunday00
:)
可以的
完全支持UpdatePanel
楼主,你有vb版的吗?能否给我发一份。我现在正好非常需要,非常感谢。
我不想用控件SqlDataSource,怎么实现更新啊?多谢
@hansong
一样的,自己在gridview的updating事件里写代码
楼主能不能在给点提示,在gridview的updating事件里写代码
我搞不定啊,最好有源码方面的示例....
@hansong
gridview的更新,删除之类的操作都是算是基础知识了,msdn里应该有示例
// 获得单元格的编辑控件
Control _editControl = _gridView.Rows[e.RowIndex].Cells[i].Controls[3];
controls 为什么会是 3 呢
@冰冷000
嗯。。。这个太久远了,不太记得了,你可以跟一下,看看012里都是什么
if (this.GridView1.SelectedIndex > -1)
{
this.GridView1.UpdateRow(this.GridView1.SelectedIndex, false);
}
我的这段代码不论是写在Page_Load里面还是GridView1_SelectedIndexChanged里面都无法触发GridView1_RowUpdating事件。要怎样才可以触发呢?
帮帮忙,很急!!!
@谢惠春
GridView在编辑模式中调用UpdateRow才会触发RowUpdating事件
偶再问一下,(*^__^*) 嘻嘻……
我的程序在点击单元格的时候,textbox可以显示出来了,但是修改以后触发不了RowUpdating方法。,怎样才算是在编辑模式中呢,我的代码和上面的相差无几,是不是还有什么地方没有设置的?
@谢惠春
嗯。。。
具体什么问题我很难猜,你可以对照一下这里提供的源代码,然后再找问题
我参照了一下源代码,在ObjectDataSource中,我是用的UpdateMethod(BLL中的方法),而源代码中是用的UpdateCommand(sql语句)。所以在运行时总会报错找不到那个方法。
如果我想在RowUpdating中直接更新而不是在数据源中配置的话,能不能做到呢?如果没有配置UpdateCommand的话,是否就不能触发RowUpdating事件了?O(∩_∩)O~
@谢惠春
和UpdateCommand没关系的
当然可以用ObjectDataSource,它也可以触发RowUpdating的
我想请问一下,现在已经实现了单元格的编辑,那么如何实验移动上下左右键的同时,在Gridview可编辑的单元格中移动那
@numberdfad
自己写对应的JavaScript喽
@webabcd
楼主,其实我不怎么会JavaScript,您能再上例的基础上写一个JavaScript,我参考一下,不胜感激
@numberdfad
抱歉,没什么兴趣写这个功能
JavaScript是很重要的,兄弟正好可以趁这个机会好好学学
我是菜鸟,学习中,模仿着做,都一样,列数也一样,我只对第2列进行单击,为什么老说index超出范围呢?
@双修结界
嗯。。。 这个我也不知道
需要你自己一步一步调试了
@微笑女王_hsf
:)
翻译的,感谢原文作者Declan Bright
但这样实现有一个问题,就是每次单击单元格都会刷新页面
@bill1987610
嗯
加上updatepanel就看不出刷新了
要想效率高的话,就要写客户端脚本
@webabcd
updatepanel我已经加上,但还是会刷新,并且很明显,就是每次点击时,IE自带的进度条都会有显示,尤其是放在服务器上时,可以明显感到再刷新页面
@bill1987610
我记得以前测试的时候没这个问题,如果你确认updatepanel写的没问题那我也没办法了,解决的王道还是javascript
问一下,单击单元格后为什么textbox无法显示,不能编辑,我是照着你的例子做的呀,label和textbox怎么把_displayControl和_editControl定义的, 我是菜鸟,请教一下!
@Mr.lonely
请下源代码后对比一下,看看是哪里的问题