1、想要达到的效果:GridView编辑数据时让表头显示为字段的中文注释方便用户修改其值(表的字段有90多个,都是英
文字段名),更新后表头还显示为字段的中文注释。说明:这里用GridView更新数据,SQLDataSource作为
GridView的DataSource,数据源是在程序中动态绑定,数据库是Oracle9i
2、刚开始我是这样做的:
数据编辑(RowEditing事件中) GridView1.EditIndex = e.NewEditIndex;
GridView1.HeaderRow.Cells[1].Text="中文注释1";
GridView1.HeaderRow.Cells[2].Text="中文注释2"�%BPOST http://forum.csdn.net/PointForum/Forum/PostT��RowUpdating事件中):
SqlDataSource1.UpdateCommand = s3;
SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.Text;
SqlDataSource1.DataBind();
GridView1.HeaderRow.Cells[1].Text="中文注释1";
GridView1.HeaderRow.Cells[2].Text="中文注释2";
但这样做编辑时、更新后表头显示的还是英文字段名,GridView1.HeaderRow.Cells[1].Text="中文注释
1"好象没起作用
3、后来我又改为下面的方法:
数据编辑(RowEditing事件中),数据绑定变为这样:
SqlDataSource1.ConnectionString = s2;
SqlDataSource1.SelectCommand = "select YTMC, BDND as 中文注释1, DZCL as 中文注释2 from 
table1 where YTMC='YC1'";    //这里省略了N个字段
SqlDataSource1.SelectCommandType = SqlDataSourceCommandType.Text;
SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataSet;
SqlDataSource1.DataBind();
下面这两句不要了:GridView1.HeaderRow.Cells[1].Text="中文注释1";
GridView1.HeaderRow.Cells[2].Text="中文注释2";
这样数据编辑时表头显示的是中文注释
但是数据更新时出错:
s3 = "UPDATE table1 SET  BDND=:BDND, DZCL=:DZCL where YTMC=:YTMC";
SqlDataSource1.UpdateCommand = s3;
SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.Text;
SqlDataSource1.DataBind();  到这里就出错了,错误是:
执行当前 Web 请求期间生成了未处理的异常。堆栈跟踪:[OracleException (0x80131938): ORA-01036: 非法的变量名/编号
但如果我把数据编辑里的语句
qlDataSource1.SelectCommand = "select YTMC, BDND as 中文注释1, DZCL as 中文注释2";  
改为:   qlDataSource1.SelectCommand = "select * from table1 where YTMC='YC1'";
则不会出错,但是没有达到我的目的
请各位大虾不吝赐教!小妹这里先行谢过了!

解决方案 »

  1.   

    这样看看
    GridView1.Columns[1].HeaderText="中文注释1";
    GridView1.Columns[2].HeaderText="中文注释2";
    ....
    GridView1.DataBind();
      

  2.   

    s3 = "UPDATE table1 SET  BDND=:BDND, DZCL=:DZCL where YTMC=:YTMC"; 
    =========
    还有要注意界面中不要用双向绑定,比如 <%# Bind("BDND")%> 都用单向绑定<%# Eval("BDND")%>,
    参数的顺序要与语句中顺序一致
      

  3.   

    TO amandag:
    谢谢!
    但这样还是不行,执行到这里:GridView1.Columns[1].HeaderText="中文注释1"; 就报如下错误:索引超出范围。必须为非负值并小于集合大小。要注意界面中不要用双向绑定,比如  <%# Bind("BDND")%> 都用单向绑定 <%# Eval("BDND")%>,这是什么意思?
    参数的顺序肯定与语句中的一致
      

  4.   

    要注意界面中不要用双向绑定,比如   <%# Bind("BDND")%> 都用单向绑定  <%# Eval("BDND")%>,这是什么意思? 
    =====
    你的页面代码中(aspx)中最好不要用双向绑定
      

  5.   

    页面代码是怎么写的?试试在GridView1.DataBind();后修改GridView1.Columns[0].HeaderText="中文注释1";也不行么?
      

  6.   

    TO amandag: 
    页面代码中没有绑,只绑了个关键字段,GridView中还有一句:DataSourceID="SqlDataSource1"
    <asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="True" BackColor="#C0C0FF" 
       DataKeyNames="YTMC"
       Height="249px" OnRowEditing="GridView1_RowEditing" 
       OnRowUpdating="GridView1_RowUpdating"
       Width="945px" 
       DataSourceID="SqlDataSource1" 
       OnRowCancelingEdit="GridView1_RowCancelingEdit" ShowFooter="True">
       <FooterStyle BackColor="#FF80FF" />
    </asp:GridView>在GridView1.DataBind();后修改GridView1.Columns[0].HeaderText="中文注释1"; 也是同样的问题
      

  7.   

    你的做法和我平常用的做法非常不一样,我一般是设置GridView的AutoGenerateColumns="false",
    然后在页面使用模版列绑定数据;而且我现在这里也没有Oracle进行测试,只能say sorry了
      

  8.   

    s3 = "UPDATE table1 SET  BDND=:BDND, DZCL=:DZCL where YTMC=:YTMC";
    SqlDataSource1.UpdateCommand = s3;
    SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.Text;
    SqlDataSource1.DataBind();  到这里就出错了,错误是:
    执行当前 Web 请求期间生成了未处理的异常。堆栈跟踪:[OracleException (0x80131938): ORA-01036: 非法的变量名/编号 
    ==========================================
    前一段时间我做了一个项目也用到了oracle数据库,你确定的s3 = "UPDATE table1 SET  BDND=:BDND, DZCL=:DZCL where YTMC=:YTMC";这句代码正确吗?
      

  9.   

    TO amandag:
    哎,其实我不太清楚如何用模版列绑定数据,是这样吗?
     <Columns>
                   <asp:BoundField DataField="YTMC" HeaderText="中文注释1" ReadOnly="True" />
                   <asp:BoundField DataField="BDND" HeaderText="中文注释2" />
                   <asp:BoundField DataField="DZCL" HeaderText="中文注释3" />
     </Columns>因为我在GridView里显示查询结果时,我是用下面的语句来做:
    GridView1.DataSource = DataTable.DefaultView;
    GridView1.DataBind(); 
    GridView1.HeaderRow.Cells[1].Text="中文注释1";
    这样没什么问题,表头会显示中文注释,因为多个表的字段都是超过90个以上,这样做还比较简单我都没在页面里绑过,你能给我说说你“在页面使用模版列绑定数据POST http://forum.csdn.net/PointForum/Forum/Reply9A�思路吗?你不能测试没关系,我来测试 
      

  10.   

    To xiaogang107:
    s3 = "UPDATE table1 SET  BDND=:BDND, DZCL=:DZCL where YTMC=:YTMC";这句代码完全正确,确定一定以及肯定
    因为:我把数据编辑里的语句 
    qlDataSource1.SelectCommand = "select YTMC, BDND as 中文注释1, DZCL as 中文注释2";   
    改为:   qlDataSource1.SelectCommand = "select * from table1 where YTMC='YC1'"; 
    则不会出错
    同时,数据库里的数据已经更新了,而且就算是程序发出这个出错信息: 
    执行当前 Web 请求期间生成了未处理的异常。堆栈跟踪:[OracleException (0x80131938): ORA-01036: 非法的变量名/编号
    数据库里的数据也更新了,好象就是那个表头出了问题
      

  11.   

      <Columns> 
                    <asp:BoundField DataField="YTMC" HeaderText="中文注释1" ReadOnly="True" /> 
                    <asp:BoundField DataField="BDND" HeaderText="中文注释2" /> 
                    <asp:BoundField DataField="DZCL" HeaderText="中文注释3" /> 
      </Columns> 
    ========
    这样是绑定列,不过也能满足要求了,再把命令按钮加进去
      

  12.   

    To amandag:
    那么如何用模版列绑定数据?
    下面这样绑定列的话:
    <Columns>  
                     <asp:BoundField DataField="YTMC" HeaderText="中文注释1" >
    <Columns>
    好象全都绑死了,一个表有90多上百个字段,而且还有N个这样的表要做数据修改,这样做也太恐怖了
    还是告诉我你说的用模版列绑定数据吧
      

  13.   

    GridView1.Columns[1].HeaderText="中文注释1";
    GridView1.Columns[2].HeaderText="中文注释2";
    ....        
    GridView1.DataBind();
      

  14.   


    你是根据数据源自动生成列的吧?
    GridView的AutoGenerateColumns=false 添加绑定列.
      

  15.   

    To lovehongyun:
    我就是根据数据源自动生成列的
    用GridView的AutoGenerateColumns=false 添加绑定列,要一列列加吗?我要做的是多个表的数据编辑与更新,我希望编辑时GridView呈现给用户的是中文表头这样方便用户编辑(表的字段都有90多上百个),编辑完后更新不出错我在GridView里显示查询结果时,我是用下面的语句来做: 
    GridView1.DataSource = DataTable.DefaultView; 
    GridView1.DataBind();  
    GridView1.HeaderRow.Cells[1].Text="中文注释1"; 
    这样没什么问题,表头会显示中文注释
    为什么编辑更新时就出现问题呢, 是因为GridView 的数据源是SqlDataSource吗?
      

  16.   

    TO liyin_liu:
    是呀,只好再想办法。为了这个问题折腾了好几天了,头都大了!
      

  17.   

    同意:amandag 
    还是用模版比较好一点,在模版的编辑模版中定义HeaderText是不是会好一点
      

  18.   

    To xiaogang107: 
    你也做数据更新吗?你是如何让Gridview显示中文表头的?TO eping 2002:
    模板列如何用?动态生成吗?