同样的做法在VS2003下可以运行,为什么在VS2005下不能运行,请高手指点.(在VB.NET中也有发贴子)
同样的做法在VS2003下可以运行,为什么在VS2005下不能运行,请高手指点
操作步骤:
拖一个ComboBox 到窗体上命名为ComboBoxName
进入代码 导入命名空间
vb.net为: Imports System.Data.SqlClient
c#为:using System.Data.SqlClient;
vb.net2003下的代码为:
' 匯入命名空間
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
' CurrencyManager 物件的類別層級宣告
Dim bmFoxStudio As BindingManagerBase
' 这里是Windows 窗体设计器生成的代码,,就省了。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ComboBoxName.DataSource = CreateDataSource()
ComboBoxName.DisplayMember = "id "
bmFoxStudio = Me.BindingContext(CreateDataSource())
End Sub
Private Function CreateDataSource() As ICollection
Dim dt As New DataTable
Dim dr As DataRow
dt.Columns.Add(New DataColumn( "id ", GetType(Int32)))
dt.Columns.Add(New DataColumn( "PkID ", GetType(String)))
For i As Integer = 0 To 5
dr = dt.NewRow()
dr(0) = i
dr(1) = "破晓之阳 "
dt.Rows.Add(dr)
Next
Dim dv As New DataView(dt)
Return dv
End Function
Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
bmFoxStudio.Position = Me.ComboBoxName.SelectedIndex
End Sub
End Class
vb.net2005 代码:
Imports System.Data.SqlClient
Public Class Form1
Dim bmFoxStudio As BindingManagerBase
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ComboBoxName.DataSource = CreateDataSource()
ComboBoxName.DisplayMember = "id "
bmFoxStudio = Me.BindingContext(CreateDataSource())
End Sub
Private Function CreateDataSource() As ICollection
Dim dt As New DataTable
Dim dr As DataRow
dt.Columns.Add(New DataColumn( "id ", GetType(Int32)))
dt.Columns.Add(New DataColumn( "PkID ", GetType(String)))
For i As Integer = 0 To 5
dr = dt.NewRow()
dr(0) = i
dr(1) = "破晓之阳 "
dt.Rows.Add(dr)
Next
Dim dv As New DataView(dt)
Return dv
End Function
Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
bmFoxStudio.Position = Me.ComboBoxName.SelectedIndex
End Sub
End Class
c#.net2003代码:
// CurrencyManager 物件的類別層級宣告
BindingManagerBase bmFoxStudio;
private void ComboBoxName_SelectedIndexChanged(object sender, System.EventArgs e)
{
bmFoxStudio.Position = ComboBoxName.SelectedIndex;
}
private void Form1_Load(object sender, System.EventArgs e)
{
ComboBoxName.DataSource = CreateDataSource( );
ComboBoxName.DisplayMember = "id ";
bmFoxStudio = this.BindingContext[CreateDataSource( )];
}
ICollection CreateDataSource( )
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn( "id ", typeof(Int32)));
dt.Columns.Add(new DataColumn( "PkID ", typeof(string)));
for (int i = 0; i < 6; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "破晓之阳 ";
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
c#.net2005 代码就省略了。
------解决方案--------------------
说真的,我除了接分,不知道说啥好了。没看出你的问题是什么。你当csdn是在线编译器?
[解决办法]
……
[解决办法]
楼主把错误信息发出来啊,代码格式乱了点
[解决办法]
错误信息在哪里?
[解决办法]
我也来接分......................
[解决办法]
UP
[解决办法]
跟踪看看
bmFoxStudio == null ???
[解决办法]
up
[解决办法]
沒有實例畫这种异常调试一下不就行了?
[解决办法]
关注。。。
[解决办法]
Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
Me.BindingContext(Me.ComboBoxName.DataSource).Position = Me.ComboBoxName.SelectedIndex
End Sub
[解决办法]
顶
朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
--------------------------------------------------
BS楼主到处发这种信息的行为,会答的又想答的自然会来答了,这样到处乱发只会使人感到讨厌
[解决办法]
自己debug看看
[解决办法]
顶
朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
--------------------------------------------------
BS LZ
[解决办法]
LZ所给出的代码是有两个明显的问题的;
1、ComboBoxName绑定的数据源与BindingContext(CreateDataSource())中的数据源是两个对象.
2、SelectIndexChange事件发生在为控件指定DataSource时,此时
bmFoxStudio 为Nothing,所以会报错,至于2003为什么没有抛出异常,还不知道原因,不过可以加上try catch语句,异常是可以捕捉到的。
[解决办法]
所以代码最好改为
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ComboBoxName.DataSource = CreateDataSource()
ComboBoxName.DisplayMember = "id "
End Sub
Private Function CreateDataSource() As ICollection
Dim dt As New DataTable
Dim dr As DataRow
dt.Columns.Add(New DataColumn( "id ", GetType(Int32)))
dt.Columns.Add(New DataColumn( "PkID ", GetType(String)))
For i As Integer = 0 To 5
dr = dt.NewRow()
dr(0) = i
dr(1) = "破晓之阳 " & i
dt.Rows.Add(dr)
Next
Dim dv As New DataView(dt)
Return dv
End Function
Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
Me.BindingContext(Me.ComboBoxName.DataSource).Position = Me.ComboBoxName.SelectedIndex
End Sub
[解决办法]
要说Bug的话只能说是2003的bug,因为 bmFoxStudio.Position = Me.ComboBoxName.SelectedIndex应该是会抛出异常的,而程序运行过程中如果未加try ..catch时就不会出现异常,这可能是bug吧
------解决方案--------------------
zhaoxiaoyang5156() ( ) 信誉:100 2007-8-1 8:31:53 得分: 0
再說了。。如果就你們不用測試,光在這麗看就能看出問題來。。我還回來來這麗提問嗎??
真是笑話。。我當我剛學啊。
回答這位朋友:
你有那么大的本事,一看就能看出來不。。不答就不答啊 。說什么在线编译器。
wuyazhe(牛肉面) ( ) 信誉:100
说真的,我除了接分,不知道说啥好了。没看出你的问题是什么。你当csdn是在线编译器?
你帖子错误提示都不写。又不是个常见问题。只帖了一段。谁愿意一行一行的读完找错误??
上面回答你问题的人是不是都看了你写的错误提示才回答的?你怎么提问这么不耐烦呢?本来这个问题在这里就是很难得到答案的。你说05编译不通过。升级编译不通过的多了去了。除了自己调试,跟踪代码。看什么地方是没有作的。自己修改。别人找。顶多是看看你说哪提示报错了。就回答你,该去看看什么,你反复声明自己不懂,但你一点也不谦虚。
我不是高手。看到我的星星也该明白,我的热心成都,如果不想回答你问题。你在我的帖子里回复的时候,我就不来看你的问题了。
ps:你这个问题我回答不了。不懂这方面的。
[解决办法]
楼主应该自省其身 而不是在这里牢骚
[解决办法]
帮你顶下
顺便接点分
[解决办法]
頂。。日上面發廣告的。
[解决办法]
曾经碰到过SelectedIndexChanged不能触发的情况,你可以查一下是不是这样的情况