序号 单位名称 技术分(满分5) 公司资质(满分30) 方案(满分5) 价格(满分3.5)合计
1     单位1     分数            分数             分数           分数          分数
2     单位2     分数            分数             分数           分数          分数
3     单位3     分数            分数             分数           分数          分数
4     单位4     分数            分数             分数           分数          分数-----------------------
问题: datagrid有什么办法实现以上类似的多行同时编辑的状态,然后点击一按钮便实现全部更新?

解决方案 »

  1.   

    使用自定义模板列绑定textbox,而不是用模认的那种绑定。在你的page_load结束之前要创建与上次写出html的时候创建的同样行数的DataGrid,这样asp.net就会在page_load结束之后立刻把所有客户端填写的textbox值对号入座地填入textbox,你在那个按钮的事件中就可以遍历datagrid的items然后把所有textbox(使用item.FindControl查找每一列上的textbox)值收集起来。
      

  2.   

    可以绑定一checkbox模版列,在itemdatabound事件中遍历所有选中的checkbox,所有选中的都行都可以修改
      

  3.   

    建议用DataList和DataGrid配合使用。
    在DataGrid中增加CheckBox模版列,将所有选中列的数据邦定到DataList,
    然后在DataList中修改,DataList用接值的文本框和选择框等组成。
    最后将所有DataList中的数据用GetChanges()方法将所有发生改变的数据统一提交到DataAdapter进行Update()
      

  4.   

    建议使用自定义模版列,
    使用textbox不过实现起来有点麻烦,提倡不用,还不如一行一行的改,那样容易出问题
      

  5.   

    使用textbox不过实现起来有点麻烦,提倡不用,还不如一行一行的改,那样容易出问题++++++++++++++++++++++++++客观不如实际需要,有几个项目,客户都希望像报表一样,无需要再触发什么事件才可编辑。
      

  6.   


    谢谢楼上几位。取值与更新数据的思路有了。现在的问题是,如何在页面加载时,就把当前datagrid的所有行变为可编辑的状态,这才是关键。
      

  7.   

    你说的就需要对datagrid进行重载方法,不过没看过别人这样做关注
      

  8.   

    其实客户考虑的,也是十分合理的。
    像c/s的报表处理,就比较方便,打开一个报表模板,用户就可整页编辑。最后只点击一个按钮便完成更新。如果在datagrid中,每行加一个更新按钮,不要说客户,连我们自己都烦s
      

  9.   

    Q: 现在的问题是,如何在页面加载时,就把当前datagrid的所有行变为可编辑的状态,这才是关键。
    ————————————————————————————————————————
    A: 如果你使用自定义模板列绑定TextBox,那么DataGrid显示的时候就是TexBox——可编辑的一个个单元格。此时DataGrid那种“编辑”按钮就根本不用了!
      

  10.   

    当然,你完全可以设置TextBox的边缘的style,让它与背景一样,而不要像默认的TextBox的3维边框那么刺眼。
      

  11.   

    A: 如果你使用自定义模板列绑定TextBox,那么DataGrid显示的时候就是TexBox——可编辑的一个个单元格。-------------------------------------------------我知道自定义模板列绑定TextBox 可以实现当前行为编辑状态,但我想实现datagrid的所有行在页面加载时,就是整个表格为编辑状态,如何考虑?
      

  12.   

    这里面有例子http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchtopquestionsaboutaspnetdatagridservercontrol.asp
      

  13.   

    Q: 我知道自定义模板列绑定TextBox 可以实现当前行为编辑状态,但我想实现datagrid的所有行在页面加载时,就是整个表格为编辑状态,如何考虑?
    ——————————————————————————————————————————
    A:可能我没有说清楚?!我的意思是你要在设计器上用自定义模板列而不用自动绑定列,然后从工具箱栏中将一个个Textbox控件拖入各个模板,有几列就拖入几个Textbox。如果你的DataGrid是10行9列的,那么叶面显示的时候就出现90个TextBox。
      

  14.   


    to: sp1234(警惕“败事有余”,容忍“成事不足”) 谢谢兄弟的建议,这样的办法不错,但假设行与列数都不固定,此办法似乎行不通?
    另,给你发了短消息,请查收。
      

  15.   

    我以前也是用模板列解决这样的问题的,但前提是列数得确定,行可以不确定。<asp:datagrid id="grid4" runat="server" AutoGenerateColumns="False" Width="100%" DataKeyField="ID">
    <Columns>
    <asp:BoundColumn ReadOnly="True" HeaderText="编号">
    <HeaderStyle Width="25px"></HeaderStyle>
    </asp:BoundColumn>
    <asp:BoundColumn DataField="Title" HeaderText="题干">
    <HeaderStyle Width="450px"></HeaderStyle>
    </asp:BoundColumn>
    <asp:TemplateColumn HeaderText="答案">
    <HeaderStyle Width="150px"></HeaderStyle>
    <ItemTemplate>
    <asp:TextBox id="TextShortRubric" runat="server" Width="100%" Height="100%"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    <PagerStyle Mode="NumericPages"></PagerStyle>
    </asp:datagrid> //保存填空题
    //循环取的DataGrid控件中选定项的值
    i = 0;
    SelectLib = lblLib4.Text.Split(',');
    foreach(DataGridItem oDataGridItem in grid4.Items)
    {
    strSql.Append("update PaperList set ");
    textbox = (TextBox)oDataGridItem.FindControl("TextShortRubric");
    if(textbox.Text == "")
    {
    strSql.Append(" KeyA=''");
    }
    else
    {
    strSql.Append(" KeyA='"+myBusFunction.EnCos(textbox.Text)+"'");
    }
    strSql.Append(" where ID='"+SelectLib[i]+"';");
    i++;
    }
      

  16.   

    使用第三方的控件,如NetAdvantage 2006版,他完全能够实现你的要求,还具有ajax实现无刷新更新能力
      

  17.   

    Q:但假设行与列数都不固定,此办法似乎行不通?
    ——————————————————————————————————————————
    A:模板列(TemplateColumn)是完全可以用代码创建的。整个DataGrid,不管是自动绑定还是模板、不管你在设计器上怎么定义,都是可以完全用程序创建的。实际上我更喜欢用程序动态产生。你可以Google一下代码“new TemplateColumn()”,应该比较容易找到很专业的例子和说明,我就不在这里说详细了。
      

  18.   

    我们以前做这样的都是自己new table出来,一格格的textbox自己写
      

  19.   

    当然自己白手起家写也可以。从DataGrid的基础上写的好处就是你可以有分页、数据绑定、列的多种类型、设计器支持等等成熟的自动处理框架可以利用。