📄 subject_42930.htm
字号:
<p>
序号:42930 发表者:萧马 发表日期:2003-06-06 23:19:48
<br>主题:有关DataGrid,这是为何,请高手指点.
<br>内容:我在一个窗体中有ComboBox--cbClass,两个DataGrid(dgrStuInfo,dgrGrade)控件,ComboBox中绑定了X表中的“班级”列<BR>(1)DataGrid控件dgrStuInfo在窗体的Load事件中绑定了StuInfo表-----------------(实现)<BR>(2)当改变cbClass中的选项时dgrStuInfo绑定的数据源发生改变-------------------(实现)<BR>(3)当双击dgrStuInfo中的某行记录时,在另外一个DataGrid也就是dgrGrade中显示该学生的成绩记录,主要代码如下:<BR><BR> Private Sub dgrStuInfo_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgrStaffInfo.DoubleClik <BR> If m_Stu Is Nothing Then<BR> m_Stu = New StuFuncOne()<BR> End If<BR> Dim strCondition As String = dtStuInfo.Rows(dgrStuInfo.CurrentRowIndex)(0).ToString '得到学生代码<BR> Dim dsGrade As DataSet<BR> strSQL = "SELECT 姓名,年度,语文,数学,英语,政治,物理,化学 FROM StuGrade WHERE 学生代码= " & PrepareStr(strCondition)<BR> dsGrade = m_Stu.GetDataSet(strSQL) '函数,得到DataSet对象<BR> dgrGrade.DataSource = dsGrade.Tables(0)<BR> End Sub<BR>问题如下:<BR> 当还没有促发cbClass_SelectedIndexChanged事件(也就是dgrStuInfo显示全部学生信息时),双击学生,都能够正确得到相应学生的成绩<BR>信息,但是当改变班级时(也就是dgrStuInfo显示相应班级学生信息时,无论首先双击dgrStuInf中哪一行学生信息,都是首先得到StuInfo表<BR>中第一个学生的成绩信息,而不是相应学生的信息,我想问题应该出在<BR>Dim strCondition As String = dtStuInfo.Rows(dgrStuInfo.CurrentRowIndex)(0).ToString 这条语句上,但不知道如何修改,请高手指点
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:阿志 回复日期:2003-06-06 23:35:05
<br>内容:无论首先双击dgrStuInf中哪一行学生信息,都是首先得到StuInfo表中第一个学生的成绩信息<BR><BR>//那么这个学生是整个StuInfo表的首记录还是本班级的学生首记录??<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧马 回复日期:2003-06-06 23:39:07
<br>内容:整个StuInfo表中首记录....
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧马 回复日期:2003-06-06 23:42:17
<br>内容:我明明已经在cbClass的cbClass_SelectedIndexChanged改变了数据源,可是怎么还是得到StuInfo表中首记录.... <BR><BR>这让我很费解...
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:阿志 回复日期:2003-06-06 23:52:11
<br>内容:既然你认为问题出到这句,不如设断点看此时dgrStuInfo对象的信息,是不是有些异常<BR>Dim strCondition As String = dtStuInfo.Rows(dgrStuInfo.CurrentRowIndex)(0).ToString <BR><BR><BR><BR>2)当改变cbClass中的选项时dgrStuInfo绑定的数据源发生改变<BR>//我觉得应该在这步多做些工作,更新完dgrStuInfo后马上用第一条更新dgrGrade<BR>//我觉得这样牢靠<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧马 回复日期:2003-06-07 00:09:39
<br>内容:我在cbClass的cbClass_SelectedIndexChanged改变了数据源,dgrStuInfo也正确显示了选中班级学生的信息..<BR><BR>好像不关dgrGrade的事,我在dgrGrade绑定数据源之前(也就是Dim strCondition As String = dtStuInfo.Rows(dgrStuInfo.CurrentRowIndex)(0).ToString 之后)用MessageBox.Show(strCondition)得到的还是StuInfo第一条记录学生的学生代码<BR>而且我在每次cbClass_SelectedIndexChanged时都设置dgrGrade.DataSource=Nothing
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:阿志 回复日期:2003-06-07 00:14:59
<br>内容:的确在控制多表关联的时候,会遇到些问题,我也是<BR><BR>也许我还没有理解到那种程度,我遇到这种情况只能笨笨用4楼的办法,强行给让他们每一步都关联着,不给他们数据源空的机会<BR><BR>我觉得数据源空的时候会遇到些莫名其妙的问题
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧马 回复日期:2003-06-07 00:21:31
<br>内容:用哪一条更新dgrGrade?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:阿志 回复日期:2003-06-07 00:24:18
<br>内容:用更新完dgrStuInfo后的第一条,当然如果记录0条就不更新了,直接置空
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧马 回复日期:2003-06-07 00:29:58
<br>内容:写个语句看看.....
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:阿志 回复日期:2003-06-07 00:46:16
<br>内容:<BR>大概是<BR><BR><BR>if dgrStuInfo.Rows.Count != 0 then<BR><BR> Dim strCondition As String = dtStuInfo.Rows(0)(0).ToString '得到学生代码<BR> Dim dsGrade As DataSet<BR> strSQL = "SELECT 姓名,年度,语文,数学,英语,政治,物理,化学 FROM StuGrade WHERE 学生代码= " & PrepareStr(strCondition)<BR> dsGrade = m_Stu.GetDataSet(strSQL) '函数,得到DataSet对象<BR> dgrGrade.DataSource = dsGrade.Tables(0)<BR><BR>else<BR> dgrGrade.DataSource=Nothing <BR>end if<BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧马 回复日期:2003-06-07 00:52:23
<br>内容:好,等养足精神我试试...
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:萧马 回复日期:2003-06-07 18:18:40
<br>内容:问题终于解决,果然出在语句 Dim strCondition As String = dtStuInfo.Rows(dgrStuInfo.CurrentRowIndex)(0).ToString 的dtStuInfo上,是我粗心大意,虽然每次我在cbClass_SelectedIndexChanged都更新了dgrStuInfo的数据源,但是却没有更新双击事件中的<BR>dtStuInfo表,所以每次查询都是根据第一次dtStaffInfo表中的数据进行查询并填充dgrGrade...<BR><BR>//谢谢阿志....<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -