access数据库中有表students,结构如下:
StudentNo ,字符,PK
StudentName,字符
Sex,是/否
Birthday,日期时间
Native,字符
Address,字符分别绑定了textBox1,textBox2,radioButton1,dateTimePicker1,textBox3,textBox4
此外与dataGrid1绑定,Form_Load事件中加上:
oleDbDataAdapter1.Fill(dataSet11);运行时如果表中没有数据则出现异常(DataBinding未能在适合所有绑定的列表中找到行),有数据则正常.在没有数据的时候,去掉radioButton和dateTimePicker的数据绑定也不会有异常,究竟是什么原因,如何处理?************** 异常文本 **************
System.Exception: DataBinding 未能在适合所有绑定的列表中找到行
   at System.Windows.Forms.DataGrid.AddNewRow()
   at System.Windows.Forms.DataGridAddNewRow.OnEdit()
   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()

解决方案 »

  1.   

    说明:
    如果将dateTimePicker的绑定从Value改为Text则该异常消失,而出现radioButton的异常:
    列"StudentNo"不允许空值..************** 异常文本 **************
    System.Data.NoNullAllowedException: 列“StudentNo”不允许空值。
       at System.Windows.Forms.DataGrid.AddNewRow()
       at System.Windows.Forms.DataGridAddNewRow.OnEdit()
       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()
      

  2.   

    即然是有数据时就正常,那你就在Form_Load事件中先判断是否有数据,如果有数据则绑定,若无数据则不绑定不就行了。
      

  3.   

    不是不radioButton默认得有个值,选中不选中,空可能不行吧
      

  4.   

    NoNullAllowedException-----不充许为空的异常...你要在绑定数据的时候做一个数据行不为空的处理....
      

  5.   

    有个简单的办法啊,用异常处理啊
    try
    {
       //-----------数据库操作------------
    }
    cath(System.IndexOutOfRangeException ex)
    {
       Console.WriteLine(ex.Message);
    }finally
    { //------------------关闭数据库连接-----------------//
      }
      

  6.   

    晕,难道这样的异常处理不应该是ADO.NET的设计者来考虑的吗?
    在delphi或BCB的数据库开发中也没说对空的数据表不能显示,得自己判断吧.而且,绑定是在VS.NET 的IDE环境属性编辑器内指定的,如果还需要手工处理,那ADO.NET全部用手工代码实现算了,还用IDE干嘛呢?
      

  7.   

    我的程序很简单,就是在IDE中加一个OleDbDataAdapter,然后用OldDbDataAdapter的配置向导生成连接,生成SQL语句,生成数据集,然后在属性编辑器中绑定控件到数据集,惟一的代码是Form_Load中对OleDataAdapter的Fill方法的调用.
      

  8.   

    难道Connection<->DataAdapter<->DataSet<->Binding<->GUI这样的架构只是玩具?
    偶的这个只是按帮助来书上的介绍做的最简单的例子,偶刚接触C#和.NET,不知道大家在实际开发数据库应用时是否使用这样的架构?
    如果需要大量编码来补这个架构的漏洞,那倒不如直接用DataCommand来操作数据了.
      

  9.   

    发现把dateTimePicker的绑定从Value改成Text,第一个异常消失.
    但是radioButton只能绑定Checked属性啊,一绑定就异常说StudentNo不能为空,不绑定这个控件就不会异常,或者把绑定改为Text属性就没事,为什么呢?也就是说所有的绑件如果绑定Text属性就没事,可是原因是什么呢?
    是不是要自己处理Binding的事件?
      

  10.   

    在: oleDbDataAdapter1.Fill(dataSet11);
    之前要加个方法对用户输入值进行判断,Update只能将正确格式数据更新到DataBase中
      

  11.   

    StudentNo是字符串,PK,怎么设默认值?
    当然可以另设一个ID自动递增字段就主键,但我不相信上面的情况就没撤了.
    而且我的目的是学习,不是要实现这个系统,希望有人能解释其中的原理,特别是绑定对不同属性的处理机制.
    其实这个问题很容易再现,
    按上面的表结构建一个access库,用向导生成OleDbDataAdapter,DataSet,绑定到textbox的Text属性,radiobutton的Checked属性和datatimepicker控件的Value属性,在Form_Load事件中加入Fill一行,运行即发生错误,这个异常不是在Form_Load中发生的,应该是在绑定的某个时刻.
      

  12.   

    TO:ChengKing(bantamweight) 
    异常出现在程序一启动的Form_Load运行之后,表中无数据,用户还没有机会输入数据呢.
      

  13.   

    对于非Text属性的绑定,是否要专门的事件处理?
      

  14.   

    如果将dateTimePicker的绑定从Value改为Text则该异常消失,
    (这个可以为你的Birthday列增加1个默认值,如果不增加1默认值,你新增加1条,dateTimePicker显示是今天的日期,如果你不去改变dateTimePicker,那直接保存进数据库的是System.DBNull)而出现radioButton的异常:
    (这个可能也是新增没值的原因)列"StudentNo"不允许空值..(这个异常不应该是radioButton的问题),可能是你在endedit的时候
    textBox1没有值。
      

  15.   

    与delphi的数据编程相比,ADO.NET似乎上手很难,delphi中对数据控件设好连接字串,加上数据源,对控件设好数据源,一个基本的可以导航的增删查改的应用就完成了,不用一行代码,ADO.NET应该是进步了呀.这种进步不应该只是在连接模型上,UI框架的设计也不至于这样差吧.要是这样,偶宁愿用DataCommand控件来直接处理UI了,还要DataAdapter和Binding干嘛.
      

  16.   

    StudentNo 是PK,保存的时候必须有值,但新增的时候没必要有默认值。绑定很多地方可能会引起EndCurrentEdit 方法而自动保存,比如dataGird选择行改变了
      

  17.   

    我刚启动程序的时候对于空表,怎么会自己增加记录呢?我只写了一行代码Fill数据集,其他都是向导生成的啊.
      

  18.   

    NET也有数据窗体向导可以设置好一切修改、删除、更新啊。不过NET的数据绑定很不好用,常常会出现莫名其妙的问题,项目大用这个会死人的。我们就有这方面的教训!!!
      

  19.   

    这个错误是程序一启动就发生的,此时窗口还没显示.调试的话发现程序离开Form_Load处理函数时产生异常.
      

  20.   

    你看看为你的Sex列设个默认值为false看行不行。没有默认值,新增的时候值是System.DBNull,这个值是无法绑定到Checked属性的。这个跟日期控件的Value属性是一样的!!!
      

  21.   

    我就是用向导生成的大部分代码,只有一句自己的代码就是Fill,觉得应该是ADO.NET最基本的例子了,结果程序一启动就异常,实在是太大的打击啊.
    应该是ADO.NET处理绑定时发生的错误.本以为用数据绑定应该是ADO.NET的标准用法,然后再编代码处理一些特别的需求,这也是RAD的意义,否则设计这个干嘛?如果大家做正式开发都不用这个,那只能算是失败的设计了.
      

  22.   

    BearRui(孤熊 | 带你去看海!) :
    非常感谢你的热心!!!
    我再试试看.
    只是不知道为什么刚启动的时候ADO.NET在后台就会新增记录呢?
      

  23.   

    你是在哪里addnew的,千万别在formload下addnew
      

  24.   

    不行,还是提示StudentNo不允许空值
    把dataGrid1的绑定去除就没问题了,看来dataGrid控件在空表时会自动增加一条记录...
      

  25.   

    我没有加任何addnew代码.看来是datagrid控件干的好事,该怎么解决呢?是否要处理数据集或数据表的事件?
      

  26.   

    你是说在没数据的时候会出这样的问题吗,你把dataGrid1设置为不能编辑看看。
      

  27.   

    实在是晕得不行,刚上来学习编一个数据库应用,全用向导,只写一行代码
    oleDbDataAdapter1.Fill(dataSet11);
    居然程序都启动不了.
      

  28.   

    dataGrid1设为readonly则不出现异常,说明dataGrid控件在没数据的时候会新增一条记录...
      

  29.   

    原因应该是:dataGrid1没数据的时候会自动定位1条新的记录。就好像你在dataGrid1中输完一条记录,它会自动新增1行,并跳到这个行上。-------------
    希望兄弟找到好的解决方法,很晚了,我要回家了,有时间再交流,88
      

  30.   

    可是如果我把radioButton的绑定从checked改为text就不出问题,难道此时就不会新增记录了吗?新增记录就不会出现StudentNo不能为空的问题了吗?
    不添代码怎么从数据库取数据呢?难道要先用一个Command对检查有没有数据,有就Fill没有就不Fill?受不了了.想知道怎么才能调试到ADO.NET框架内部啊?在Delphi中可以调试到VCL源码中,这样对框架的了解就很容易了.
      

  31.   

    你这样写
    SqlConnection sqlconDBEmptyCheck=new SqlConnection("server=.;uid=sa;pwd=sa");//打开数据库连接
    DataSet dsDBCreate=new DataSet();
    SqlDataAdapter sqlDADBCreate=new SqlDataAdapter("SELECT * FROM master..sysdatabases WHERE  name ='ADDSYSTEMMANAGE'",sqlconDBEmptyCheck);
    sqlDADBCreate.Fill(dsDBCreate,"dbCheck");
    dgDisPlay.DataSource=dsDIS.Tables["tbDLLMANAGE"].DefaultView;帮定datagrid
    放在某个事件里面datagrid将在每次触发时自动显示数据,
      

  32.   

    数据绑定报错都是乱报,不一定就是错误的愿意。对了,为什么绑定DefaultView而不直接绑定 dsDIS.Tables["tbDLLMANAGE"]
      

  33.   

    我对数据绑定的理解是这样的,不知对不对,请大侠指教:
    http://www.xtra-ucd.com/databinding.jpg
    按这种理解,一个"标准"的ADO.NET应用程序应该是按ADO.NET的设计者的思路,用绑定对象管理器对各种绑定进行管理,从而简化GUI方面的编程.可为什么连这种基础的应用都出错呢,应该如何处理?总结一下偶的问题:access数据库中有表students,结构如下:
    StudentNo ,字符,PK
    StudentName,字符
    Sex,是/否
    Birthday,日期时间
    Native,字符
    Address,字符在VS 2003.NET IDE中建立一个windows Form应用,建立数据库连接,加一个OleDbDataAdapter,在向导中直接生成四个Command对象,再生成数据集dataSet11,在Form_Load事件中加上:
    oleDbDataAdapter1.Fill(dataSet11);在窗体中加入一个dataGrid1并进行绑定,以及若干textBox绑定StudentNo,StudentName,Native,Address,加入dateTimePicker绑定Birthday,加入一个radioButton绑定Sex除了oleDbDataAdapter1.Fill(dataSet11);这句没有自己写代码.问题:
    ==========================
    1.当Students表不为空时,不会有任何问题.2.当Students表为空时,有以下结果:2.1不绑定dataGrid时,也不会有任何问题2.2绑定dataGrid时,有以下结果2.2.1所有非dataGrid的绑定属性为Text时,也不会有任何问题2.2.2在以上情况下,如果dataTimePicker1绑定的是value属性,程序启动时会产生异常:
    DataBinding未能在适合所有绑定的列表中找到行.
    ************** 异常文本 **************
    System.Exception: DataBinding 未能在适合所有绑定的列表中找到行
       at System.Windows.Forms.DataGrid.AddNewRow()
       at System.Windows.Forms.DataGridAddNewRow.OnEdit()
       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()
    改为绑定Text后该异常消失2.2.3如果radioButton1绑定的是Checked属性,程序启动时会产生异常:列StudentNo不能为空,改为绑定Text属性则异常消失(不过绑定Text属性没有意义)我的理解:当Studetns表为空时,绑定dataGrid,dataGrid会自动加入一个新行,而这个新行的初始值都是NULL,造成与控件绑定时产生问题.想知道该怎么解决?在哪里处理?
    以前学delphi时,拖放几个控件就能完成基本的数据库增删改,不用一行代码,怎么ADO.NET编程的模型这么复杂?本以为只要写这一句代码,
    oleDbDataAdapter1.Fill(dataSet11);
    真是打击啊.哪位高手帮助解释一下数据绑定的内部机制.在delphi中可以支持调试VCL源码,所以有什么问题可以自己来查,不知道.NET上开发想了解内部机制的时候怎么办?出了错也不知道所以然...