请教各位大虾一菜鸟问题:GridView编辑数据时如何能让表头显示为字段的中文注释并且在数据更新时不出错?

hopelhs 2008-05-13 09:40:16
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 https://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'";
则不会出错,但是没有达到我的目的
请各位大虾不吝赐教!小妹这里先行谢过了!
...全文
412 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
hopelhs 2008-05-15
  • 打赏
  • 举报
回复
换了个方法,问题解决.
谢谢各位
hopelhs 2008-05-14
  • 打赏
  • 举报
回复
To xiaogang107:
你也做数据更新吗?你是如何让Gridview显示中文表头的?

TO eping 2002:
模板列如何用?动态生成吗?
amandag 2008-05-13
  • 打赏
  • 举报
回复
<Columns>
<asp:BoundField DataField="YTMC" HeaderText="中文注释1" ReadOnly="True" />
<asp:BoundField DataField="BDND" HeaderText="中文注释2" />
<asp:BoundField DataField="DZCL" HeaderText="中文注释3" />
</Columns>
========
这样是绑定列,不过也能满足要求了,再把命令按钮加进去
hopelhs 2008-05-13
  • 打赏
  • 举报
回复
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: 非法的变量名/编号
数据库里的数据也更新了,好象就是那个表头出了问题
eping2002 2008-05-13
  • 打赏
  • 举报
回复
同意:amandag
还是用模版比较好一点,在模版的编辑模版中定义HeaderText是不是会好一点
hopelhs 2008-05-13
  • 打赏
  • 举报
回复
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 https://forum.csdn.net/PointForum/Forum/Reply9A�思路吗?你不能测试没关系,我来测试




大自然D使者 2008-05-13
  • 打赏
  • 举报
回复
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";这句代码正确吗?
amandag 2008-05-13
  • 打赏
  • 举报
回复
你的做法和我平常用的做法非常不一样,我一般是设置GridView的AutoGenerateColumns="false",
然后在页面使用模版列绑定数据;而且我现在这里也没有Oracle进行测试,只能say sorry了
hopelhs 2008-05-13
  • 打赏
  • 举报
回复
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"; 也是同样的问题
amandag 2008-05-13
  • 打赏
  • 举报
回复
页面代码是怎么写的?

试试在GridView1.DataBind();后修改GridView1.Columns[0].HeaderText="中文注释1";也不行么?
amandag 2008-05-13
  • 打赏
  • 举报
回复
要注意界面中不要用双向绑定,比如 <%# Bind("BDND")%> 都用单向绑定 <%# Eval("BDND")%>,这是什么意思?
=====
你的页面代码中(aspx)中最好不要用双向绑定
hopelhs 2008-05-13
  • 打赏
  • 举报
回复
TO amandag:
谢谢!
但这样还是不行,执行到这里:GridView1.Columns[1].HeaderText="中文注释1"; 就报如下错误:索引超出范围。必须为非负值并小于集合大小。

要注意界面中不要用双向绑定,比如 <%# Bind("BDND")%> 都用单向绑定 <%# Eval("BDND")%>,这是什么意思?
参数的顺序肯定与语句中的一致

amandag 2008-05-13
  • 打赏
  • 举报
回复
s3 = "UPDATE table1 SET BDND=:BDND, DZCL=:DZCL where YTMC=:YTMC";
=========
还有要注意界面中不要用双向绑定,比如 <%# Bind("BDND")%> 都用单向绑定<%# Eval("BDND")%>,
参数的顺序要与语句中顺序一致
amandag 2008-05-13
  • 打赏
  • 举报
回复
这样看看
GridView1.Columns[1].HeaderText="中文注释1";
GridView1.Columns[2].HeaderText="中文注释2";
....
GridView1.DataBind();


hopelhs 2008-05-13
  • 打赏
  • 举报
回复
自己再顶一下
hopelhs 2008-05-13
  • 打赏
  • 举报
回复
自己顶一下
hopelhs 2008-05-13
  • 打赏
  • 举报
回复
TO liyin_liu:
是呀,只好再想办法。为了这个问题折腾了好几天了,头都大了!
liyin_liu 2008-05-13
  • 打赏
  • 举报
回复
再想办法吧
hopelhs 2008-05-13
  • 打赏
  • 举报
回复
To lovehongyun:
我就是根据数据源自动生成列的
用GridView的AutoGenerateColumns=false 添加绑定列,要一列列加吗?

我要做的是多个表的数据编辑与更新,我希望编辑时GridView呈现给用户的是中文表头这样方便用户编辑(表的字段都有90多上百个),编辑完后更新不出错

我在GridView里显示查询结果时,我是用下面的语句来做:
GridView1.DataSource = DataTable.DefaultView;
GridView1.DataBind();
GridView1.HeaderRow.Cells[1].Text="中文注释1";
这样没什么问题,表头会显示中文注释
为什么编辑更新时就出现问题呢, 是因为GridView 的数据源是SqlDataSource吗?
lovehongyun 2008-05-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hopelhs 的回复:]
TO amandag:
谢谢!
但这样还是不行,执行到这里:GridView1.Columns[1].HeaderText="中文注释1"; 就报如下错误:索引超出范围。必须为非负值并小于集合大小。

要注意界面中不要用双向绑定,比如 <%# Bind("BDND")%> 都用单向绑定 <%# Eval("BDND")%>,这是什么意思?
参数的顺序肯定与语句中的一致
[/Quote]

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

加载更多回复(3)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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

试试用AI创作助手写篇文章吧