System.ArgumentException: 列“编 号”不属于表 tablename
c# winform 解决马上给分,急!在线等.页面初始化是没有问题.更新的时候有时候会出现这个问题,有时候不出现这个问题.
代码:
string strSqlSel = "select id,name,teacher,startdate,enddate,days,remarks from stuleave order by id desc";
DataSet dsDg = conn.ds(strSqlSel);
dsDg.Tables[0].Columns["id"].ColumnName = "编 号";
dsDg.Tables[0].Columns["name"].ColumnName = "请假人";
dsDg.Tables[0].Columns["teacher"].ColumnName = "批准人";
dsDg.Tables[0].Columns["startdate"].ColumnName = "请假开始日期";
dsDg.Tables[0].Columns["enddate"].ColumnName = "截止日期";
dsDg.Tables[0].Columns["days"].ColumnName = "共计(天)";
dsDg.Tables[0].Columns["remarks"].ColumnName = "备注";
this.dataGrid1.DataSource = dsDg.Tables[0].DefaultView;
错误提示:
************** 异常文本 **************
System.ArgumentException: 列“编 号”不属于表 tablename。
at System.Data.DataRow.CheckColumn(DataColumn column)
at System.Data.DataRowView.GetColumnValue(DataColumn column)
at System.Data.DataColumnPropertyDescriptor.GetValue(Object component)
at System.Windows.Forms.DataGridColumnStyle.GetColumnValueAtRow(CurrencyManager source, Int32 rowNum)
at System.Windows.Forms.DataGridTextBoxColumn.Edit(CurrencyManager source, Int32 rowNum, Rectangle bounds, Boolean readOnly, String instantText, Boolean cellIsVisible)
at System.Windows.Forms.DataGrid.Edit(String instantText)
at System.Windows.Forms.DataGrid.Edit()
at System.Windows.Forms.DataGrid.OnEnter(EventArgs e)
at System.Windows.Forms.Control.NotifyEnter()
at System.Windows.Forms.ContainerControl.UpdateFocusedControl()
--------------------编程问答-------------------- 哈哈,既然“页面初始化是没有问题.更新的时候有时候会出现这个问题,有时候不出现这个问题.”那就不要贴初始化的代码,贴下更新操作的代码,更新什么数据时出现错误的?有了这些信息才好分析啊:)
--------------------编程问答-------------------- 这个刷新父页面的上的那个datagrid的代码
finally
{
frmStuLeave frmF = (frmStuLeave)this.Owner;
frmF.dgbind();
}
调用的dgbind方法 --------------------编程问答-------------------- 初始化不跑更新的代码 当然没有问题。
看看“编 号”中间的空格是否是罪魁祸首?和其它地方是否匹配? --------------------编程问答-------------------- select id as 编号,name as 请假人,... order by id desc";
这样就不用写下面的代码了,试试 --------------------编程问答-------------------- 你干什么要改Table的ColumnName,Name支持中文可能有问题,看了你的代码,你只是想更改
Table的Column的Caption,你的ColumnName都改成中文名了,在更新的时候已经没有“id”这列了,当让出错了。建议你改成
dsDg.Tables[0].Columns["id"].Caption= "编 号";
dsDg.Tables[0].Columns["name"].Caption= "请假人";
dsDg.Tables[0].Columns["teacher"].Caption= "批准人";
dsDg.Tables[0].Columns["startdate"].Caption= "请假开始日期";
dsDg.Tables[0].Columns["enddate"].Caption= "截止日期";
dsDg.Tables[0].Columns["days"].Caption= "共计(天)";
dsDg.Tables[0].Columns["remarks"].Caption= "备注";
--------------------编程问答-------------------- 把"编 号"中的空格去掉试试 --------------------编程问答-------------------- 还是报错,跟以前一样 --------------------编程问答-------------------- 晕,反复看 了你的代码?就是我上面说的问题,真晕,你改什么名字呀,改列的Caption不就行了吗? --------------------编程问答-------------------- 为什么要改ds的列名了?这个又不对你的显示有影响!如果你是利用ds来进行提交数据库,那么这样你肯定破坏了原有数据库的结构,更新肯定有错误。
请说明一下该ds的列名的意图 --------------------编程问答-------------------- 改列的Caption --------------------编程问答-------------------- 列的Caption改了也不行 --------------------编程问答-------------------- System.ArgumentException: 列“编 号”不属于表 tablename。
变成了
System.ArgumentException: 列ID不属于表 tablename。 --------------------编程问答-------------------- 改过列的Caption,又根据这个编号去做update,应该是有问题的
如果没有必要,就不要去改列名 --------------------编程问答-------------------- 楼主的问题很怪 --------------------编程问答-------------------- id不是表的字段,
LZ检查仔细! --------------------编程问答-------------------- 是每次打开页面第一次的时候出现这种情况,以后就没事了 --------------------编程问答-------------------- 字段没有错 --------------------编程问答-------------------- 会不会是别的地方有问题 --------------------编程问答-------------------- 默认数据库的列名对应DATATABLE的列名
如果你改动了列名 就需要你设置下 数据库的列名和DATATABLE的列名的map
ado.net 方面的东西,好久没复习,忘记怎么写了。你可以google下这方面的东西 --------------------编程问答-------------------- 我的不是更新,是添加记录的时候的问题.更新反而没有问题 --------------------编程问答-------------------- this.dataGrid1.DataSource = dsDg.Tables[0].DefaultView;
‘DefaultView 属性返回可用于排序、筛选和搜索 DataTable 的 DataView。’这是MSDN上的内容,你需要确认你的dataGrid1绑定的表和你dataGrid更新的表是同一个,我估计,你绑定的不是真真的DataSet中的表,而是给表的一个DataView对象,而你更新的却是DataSet中的表,
你可以吧
this.dataGrid1.DataSource = dsDg.Tables[0].DefaultView
改成
this.dataGrid1.DataSource = dsDg.Tables[0];
然后在看看,
反正怎么着你都需要确定你绑定的Table&你好更新的Table是同一个表。 --------------------编程问答-------------------- 列名不用改的。网格映射的MAPPINGNAME改改。 --------------------编程问答-------------------- 仔细查sql 先把sql放到分析查询器中跑一下 确定不是那里的问题再找代码的问题 个人感觉还是字段没有匹配的缘故。 --------------------编程问答-------------------- 为什么要使用中文呢?可能你中文之间的空格数量不同. --------------------编程问答-------------------- select 语句没有问题.
this.dataGrid1.DataSource = dsDg.Tables[0];我改了试也还是提示
System.ArgumentException: 列“id”不属于表 tablename。
--------------------编程问答-------------------- 断点跟踪 查看此时ds中到底有几张表 ?再看绑定表中是否有id列 --------------------编程问答--------------------
************** JIT 调试 **************
计算机的配置文件(machine.config)的
system.windows.forms 节中必须设置 jitDebugging 值。
编译应用程序时还必须启用\r\n调试。\r\n\r\n例如: \r\n\r\n<configuration>\r\n <system.windows.forms jitDebugging="true" />\r\n</configuration>\r\n\r\n启用 JIT 调试后,任何未处理的异常\r\n都将被发送到此计算机上注册的 JIT 调试器,\r\n而不是由此对话框处理。\r\n
这个是什么意思 --------------------编程问答-------------------- 我晕,数据绑定有那么难吗?还没有搞定,兄弟加油吧,深度挖掘一下ADO吧,继续关注ing. --------------------编程问答-------------------- 断点调试结果,表只有一个,第一列的列名为id,我矿晕,怎么办啊 --------------------编程问答-------------------- 数据添加能成功,就是报错,怎么办 --------------------编程问答-------------------- 我也遇到类似的问题了,我是在中间的列出现的问题,但是查dataset里面数据都是完整的 --------------------编程问答-------------------- 有相似的问题.
一般应该是datatable的列名称有修改影响的.
比如重新设置了col的相关信息.可能是无意中修改的,比如copy datagrid 此时col信息就共用了.
补充:.NET技术 , C#