请教,如何才能把GridView指定须要编辑的列,批量转换为编辑状态. 
我已经知道一种,隐藏编辑列来的办法,但是我想求得更好的办法,谢谢.

解决方案 »

  1.   

    我靠,怎么弄图片啊?
    这东西不是跟你说了么.利用gridview中的模板列.还有就是编辑和删除我建议用模板列来做,用系统提供的这个东西我总是觉得很痛苦,其实手动控制感觉更自由
    不过单条的编辑和删除,不是这个帖子的目的.我就说一说如何实现你说的全部编辑全部更新吧
    没有什么可说的,"天虹穿"这一列肯定是个模板列,一个label一个textbox,编辑的时候显示文本框非编辑状态显示label.
    这个东西,不管是从数据库里获取的,还是手动编写的,基本上都是要放到一个dataset/datatable中.所以,可以利用RowDataBound + 一个标示字段来实现.
    加入你的数据是放在dataset中的第0个表里即  ds.tables[0].
    首先加入一个字段
    //假设天虹穿是第3列,即它的数组下标是2
    dt = ds.tables[0];
    dt.columns.add("edit",typeof(bool));
    dt.columns["edit"].defaultvalue = false;//即非编辑状态
    然后在rowdatabound事件中填写代码
    if (e.row.type == DataControlRowType.datarow)//即数据行,非gridview头或尾
    {
         bool isedit = bool.parse(ds.tables[0].rows[e.row.rowindex]["edit"].tostring());
         if (e.row.findcontrol("textbox1") != null)
         {
             (e.row.findcontrol("textbox1") as textbox).visible = isedit;
             (e.row.findcontrol("textbox1") as textbox).text = ds.tables[0].rows[e.row.rowindex]["天虹穿那一列"].tostring();
         }
         if (e.row.findcontrol("label1") != null)
         {
             (e.row.findcontrol("label1") as label).visible = !isedit;
             (e.row.findcontrol("label1") as label). = ds.tables[0].rows[e.row.rowindex]["天虹穿那一列"].tostring();
         }
    }
    上面算是伪代码了.大小写你自己去vs中输入自然就知道了(上面是控制文本框与label可见性的)
    至于剩下的全部更新,就有点麻烦了.因为,你填东西后没有与后台交互,所以在点全部更新的时候必须把里面的值都取出来,然后弄到ds中.这本身没有什么特殊的技术而言,当然js是肯定需要的了.我觉得要解决这个问题,完全算是个人是一种思维习惯了.可以跟textbox注册一个onblur事件,然后在js的脚本中来获得行号(他会对应到ds.tables[0]中的rows号 e.row.rowsindex),然后再维护一个数组,或者是字符串,在onblur事件中处理它.在更新的时候去遍历这个数组,进而将值都保存回去.
    前面的或许你看的还有些眉目,后面的肯定迷糊了.可能是你从来没有过这种经验,等我中午有时间了,给你做一个demo.下次有问题就再群里问,要是觉得群里解决不了,你在CSDN发帖子后就别在群里弄个链接让大家看了
      

  2.   

    我靠,怎么弄图片啊?
    这东西不是跟你说了么.利用gridview中的模板列.还有就是编辑和删除我建议用模板列来做,用系统提供的这个东西我总是觉得很痛苦,其实手动控制感觉更自由
    不过单条的编辑和删除,不是这个帖子的目的.我就说一说如何实现你说的全部编辑全部更新吧
    没有什么可说的,"天虹穿"这一列肯定是个模板列,一个label一个textbox,编辑的时候显示文本框非编辑状态显示label.
    这个东西,不管是从数据库里获取的,还是手动编写的,基本上都是要放到一个dataset/datatable中.所以,可以利用RowDataBound + 一个标示字段来实现.
    加入你的数据是放在dataset中的第0个表里即  ds.tables[0].
    首先加入一个字段
    //假设天虹穿是第3列,即它的数组下标是2
    dt = ds.tables[0];
    dt.columns.add("edit",typeof(bool));
    dt.columns["edit"].defaultvalue = false;//即非编辑状态
    然后在rowdatabound事件中填写代码
    if (e.row.type == DataControlRowType.datarow)//即数据行,非gridview头或尾
    {
         bool isedit = bool.parse(ds.tables[0].rows[e.row.rowindex]["edit"].tostring());
         if (e.row.findcontrol("textbox1") != null)
         {
             (e.row.findcontrol("textbox1") as textbox).visible = isedit;
             (e.row.findcontrol("textbox1") as textbox).text = ds.tables[0].rows[e.row.rowindex]["天虹穿那一列"].tostring();
         }
         if (e.row.findcontrol("label1") != null)
         {
             (e.row.findcontrol("label1") as label).visible = !isedit;
             (e.row.findcontrol("label1") as label). = ds.tables[0].rows[e.row.rowindex]["天虹穿那一列"].tostring();
         }
    }
    上面算是伪代码了.大小写你自己去vs中输入自然就知道了(上面是控制文本框与label可见性的)
    至于剩下的全部更新,就有点麻烦了.因为,你填东西后没有与后台交互,所以在点全部更新的时候必须把里面的值都取出来,然后弄到ds中.这本身没有什么特殊的技术而言,当然js是肯定需要的了.我觉得要解决这个问题,完全算是个人是一种思维习惯了.可以跟textbox注册一个onblur事件,然后在js的脚本中来获得行号(他会对应到ds.tables[0]中的rows号 e.row.rowsindex),然后再维护一个数组,或者是字符串,在onblur事件中处理它.在更新的时候去遍历这个数组,进而将值都保存回去.
    前面的或许你看的还有些眉目,后面的肯定迷糊了.可能是你从来没有过这种经验,等我中午有时间了,给你做一个demo.下次有问题就再群里问,要是觉得群里解决不了,你在CSDN发帖子后就别在群里弄个链接让大家看了
      

  3.   

    我靠,怎么弄图片啊?
    这东西不是跟你说了么.利用gridview中的模板列.还有就是编辑和删除我建议用模板列来做,用系统提供的这个东西我总是觉得很痛苦,其实手动控制感觉更自由
    不过单条的编辑和删除,不是这个帖子的目的.我就说一说如何实现你说的全部编辑全部更新吧
    没有什么可说的,"天虹穿"这一列肯定是个模板列,一个label一个textbox,编辑的时候显示文本框非编辑状态显示label.
    这个东西,不管是从数据库里获取的,还是手动编写的,基本上都是要放到一个dataset/datatable中.所以,可以利用RowDataBound + 一个标示字段来实现.
    加入你的数据是放在dataset中的第0个表里即  ds.tables[0].
    首先加入一个字段
    //假设天虹穿是第3列,即它的数组下标是2
    dt = ds.tables[0];
    dt.columns.add("edit",typeof(bool));
    dt.columns["edit"].defaultvalue = false;//即非编辑状态
    然后在rowdatabound事件中填写代码
    if (e.row.type == DataControlRowType.datarow)//即数据行,非gridview头或尾
    {
         bool isedit = bool.parse(ds.tables[0].rows[e.row.rowindex]["edit"].tostring());
         if (e.row.findcontrol("textbox1") != null)
         {
             (e.row.findcontrol("textbox1") as textbox).visible = isedit;
             (e.row.findcontrol("textbox1") as textbox).text = ds.tables[0].rows[e.row.rowindex]["天虹穿那一列"].tostring();
         }
         if (e.row.findcontrol("label1") != null)
         {
             (e.row.findcontrol("label1") as label).visible = !isedit;
             (e.row.findcontrol("label1") as label). = ds.tables[0].rows[e.row.rowindex]["天虹穿那一列"].tostring();
         }
    }
    上面算是伪代码了.大小写你自己去vs中输入自然就知道了(上面是控制文本框与label可见性的)
    至于剩下的全部更新,就有点麻烦了.因为,你填东西后没有与后台交互,所以在点全部更新的时候必须把里面的值都取出来,然后弄到ds中.这本身没有什么特殊的技术而言,当然js是肯定需要的了.我觉得要解决这个问题,完全算是个人是一种思维习惯了.可以跟textbox注册一个onblur事件,然后在js的脚本中来获得行号(他会对应到ds.tables[0]中的rows号 e.row.rowsindex),然后再维护一个数组,或者是字符串,在onblur事件中处理它.在更新的时候去遍历这个数组,进而将值都保存回去.
    前面的或许你看的还有些眉目,后面的肯定迷糊了.可能是你从来没有过这种经验,等我中午有时间了,给你做一个demo.下次有问题就再群里问,要是觉得群里解决不了,你在CSDN发帖子后就别在群里弄个链接让大家看了
      

  4.   

    老大,杂回事呢,我还菜呢..
    提示 if (e.Row.findcontrol("textbox1") != null) 中的e并不包含“Row”的定义
    错误 1 “System.EventArgs”并不包含“Row”的定义 D:\!ayurep\成都企业网_CDQY\XkCmsV2\webForm\Manager\ayurep_admin\MartPrice_Add.aspx.cs 27 52 webForm
      

  5.   

    唉~~JS不怎么会用!刚做了类似的gridview,我是用遍历获取修改的数据
    还准备用FSO来操作图库!!晕~~
      

  6.   

    去我资源里下个东西吧,记得给分,资源免费!realworldgridview