为了使某些Web控件可以显示DataGrid中当前选定行的数据,我用了控件的DataBindings属性进行设置,把控件绑定到DataView上。然后在DataGrid的SelectedIndexChanged事件中增加下述代码: Dim index As Integer Dim key As String index = DataGrid1.SelectedIndex key = DataGrid1.DataKeys(index).ToString() DataView1.RowFilter = DataGrid1.DataKeyField & " = '" & key & "'" Label1.DataBind() Label2.DataBind() Label3.DataBind() 编译执行,结果莫名奇妙地产生“索引0不是非负数且小于总行数”的错误,如下。 |
于是搜了一下百度和Google,但没有找到关于这个问题的产生原因和解决方法的相关文章。没办法,只好自己再研究研究。在一番尝试之后,发现问题出在DataView上面,试着在这段代码中加入把DataGrid绑定到DataView的代码,结果DataGrid显示为空。也就说明DataView的内容变空了,而DataView的Table属性是DataSet的数据表,也就是说问题的源头在DataSet上。然后试着在代码中加入SqlDataAdapter1.Fill(DataSet1)这条语句,结果问题解决了。于是猜测在SelectedIndexChanged事件中,DataSet被自动清空了,我的DataSet是放在当前网页上的,至于为什么会被清空就不清楚了。总之,这个莫名其妙的报错的原因就是数据为空,重新用SqlDataAdapter刷新一下DataSet就行了。如果有谁知道为什么DataSet在事件中被清空,请告诉我,我最近刚接触VB.Net的Web编程。 |