同样的做法在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 Classvb.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 Classc#.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 代码就省略了。
操作步骤:
拖一个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 Classvb.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 Classc#.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 代码就省略了。
{
bmFoxStudio.Position = ComboBoxName.SelectedIndex;
}
當我們運行程序時,bmFoxStudio.Position = ComboBoxName.SelectedIndex;就報錯。說什么沒有實例畫,但是在VS2003就不會報錯本身從程序本身是看不出錯誤來的。因為本身并沒有錯。如果大家想知道答案的話,必須得用VS2005測試下。
真是笑話。。我當我剛學啊。回答這位朋友:
你有那么大的本事,一看就能看出來不。。不答就不答啊 。說什么在线编译器。
wuyazhe(牛肉面) ( ) 信誉:100 说真的,我除了接分,不知道说啥好了。没看出你的问题是什么。你当csdn是在线编译器?
在VS2003是可以跑的。
同樣的代碼,一個報錯。一個能運行。
有那么好調試 ,,我還用得著 請您來回來這個問題嗎?真是笑話。
bmFoxStudio = Me.BindingContext(CreateDataSource())
改为
bmFoxStudio = Me.BindingContext(Me.ComboBoxName.DataSource)
Bote_China()
代码稍做下修改就可以了
bmFoxStudio = Me.BindingContext(CreateDataSource())
改为
bmFoxStudio = Me.BindingContext(Me.ComboBoxName.DataSource)
Me.BindingContext(Me.ComboBoxName.DataSource).Position = Me.ComboBoxName.SelectedIndex
End Sub
朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
--------------------------------------------------
BS楼主到处发这种信息的行为,会答的又想答的自然会来答了,这样到处乱发只会使人感到讨厌
朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
--------------------------------------------------BS 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
難到是:VS2005的debug嗎?
Bote_China() 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
可否把這個的debug 發給俺看看。
wdzr_826(舞指如歌(学了.NET后才知道由一个坑跳进另一个坑))
自己debug看看
我從昨天發到今天,一個通宵了。好像就你一個說讨厌啊。。少數讨厌是可以理解的。不怪你,
edmajia01()
顶
朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
--------------------------------------------------
BS楼主到处发这种信息的行为,会答的又想答的自然会来答了,这样到处乱发只会使人感到讨厌
自己debug看看 靠,debug,我不是看了啊我上面又寫,就你這人,說得都不是能解答問題的。就別說了。
顶
朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
這個嗎? 就個個說LZ。
再說了。。我的問題是 VS2003能跑。VS2005不能跑。這是為什么。
你們所給出的信息。本身我之前就做過測試。我本身就知道是那么回事。你這樣一改 BindingManagerBase bmFoxStudio;
不是 沒用上嗎? 本身這個問題 就是在測試它的用法啊。但是我的問題是
VS2003能跑。VS2005不能跑。這是為什么。
Bote_China()
要说Bug的话只能说是2003的bug,因为 bmFoxStudio.Position = Me.ComboBoxName.SelectedIndex应该是会抛出异常的,而程序运行过程中如果未加try ..catch时就不会出现异常,这可能是bug吧
再說了。。如果就你們不用測試,光在這麗看就能看出問題來。。我還回來來這麗提問嗎??
真是笑話。。我當我剛學啊。回答這位朋友:
你有那么大的本事,一看就能看出來不。。不答就不答啊 。說什么在线编译器。
wuyazhe(牛肉面) ( ) 信誉:100 说真的,我除了接分,不知道说啥好了。没看出你的问题是什么。你当csdn是在线编译器?
你帖子错误提示都不写。又不是个常见问题。只帖了一段。谁愿意一行一行的读完找错误??
上面回答你问题的人是不是都看了你写的错误提示才回答的?你怎么提问这么不耐烦呢?本来这个问题在这里就是很难得到答案的。你说05编译不通过。升级编译不通过的多了去了。除了自己调试,跟踪代码。看什么地方是没有作的。自己修改。别人找。顶多是看看你说哪提示报错了。就回答你,该去看看什么,你反复声明自己不懂,但你一点也不谦虚。
我不是高手。看到我的星星也该明白,我的热心成都,如果不想回答你问题。你在我的帖子里回复的时候,我就不来看你的问题了。ps:你这个问题我回答不了。不懂这方面的。
因為這個東西。。只有測試才知道是怎么回事。不是一看就能看懂的。除非
顶 “朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702 ”這話很清楚了。。是說看看這個問題。有沒說這是答案。
http://community.csdn.net/Expert/TopicView1.asp?id=5665468
http://community.csdn.net/Expert/TopicView1.asp?id=5665271
“朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702 ”這話很清楚了。。是說看看這個問題。有沒說這是答案。
奇怪了。。我分给出去了。。为什么 你们还可以进来说话啊。。朋友。
r0ex(地狱门神) 再说了。那样我也是帮你顶了一下啊。。你知道不。顶了一下。你就会到前面去的再说了我用这种方法 还真有效果。。在这个里面找到了答案。。再次谢谢Bote_China() 和各位朋友。
r0ex(地狱门神) 你看你的 。不是我顶了一下。还没有人顶呢?? 还怪我,,自己没看清楚吧了。。