积极答复者
关于控件数据源绑定的BindingManagerBase问题?

问题
-
两个地方百思不得其解:
一、新建BindingManagerBase后,在调用其类型居然变成了Relatedpropertymanager。
比如:
dim 数据绑定 as BindingManagerBase
数据绑定 = form1.textbox1.bindingcontext(dataset1,"表格名称")
数据绑定.gettype().fullname.to.string
结果就是:Relatedpropertymanager。很蹊跷吧!
二、准备提交修改结果进行保存的时候,使用EndCurrentEdit方法,居然提示一大堆:
比如:
数据绑定.EndCurrentEdit()
结果就是:
是不是更蹊跷呢,哪里来的with变量呢!- 已编辑 fengqiwuyong 2012年9月26日 6:42
答案
-
第二疑问已经解决了,是自己准备的控件数组溢出了。
前面一个还是没搞清楚。虽然也能运行。
- 已标记为答案 Mike FengModerator 2012年10月8日 11:34
-
第二疑问已经解决了,是自己准备的控件数组溢出了。
前面一个还是没搞清楚。虽然也能运行。
第一个蹊跷:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.bindingmanagerbase(v=vs.80).aspx 是一个虚类,当你实例化后,它必然有一个具体的类型,这个Relatedpropertymanager,就是这个具体的类型,而你的bindingmanagerBase只是一个父类。这个方法默认是返回当前实例的实际类型名
数据绑定.gettype().fullname.to.string
Mike Feng
MSDN Community Support | Feedback to us
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Mike FengModerator 2012年10月8日 11:34
全部回复
-
数据绑定我建议你TextBox应该绑定的是.DataBindings方法,而不是使用BindingManagerBase-这是一个针对窗体的BindingContext方法。假设窗体上有一个TextBox,有一个“向后”,“向前”和“保存”的按钮,请看我的做法:
Public Partial Class Form1 Inherits Form Private ds As New DataSet() Private dt As New DataTable("Test") Private mbase As BindingManagerBase = Nothing Public Sub New() InitializeComponent() dt.Columns.Add("name", GetType(String)) For i As Integer = 1 To 10 dt.Rows.Add("姓名" & i) Next ds.Tables.Add(dt) '绑定数据源 mbase = BindingContext(ds, "Test") textBox1.DataBindings.Add("Text", ds, "Test.name") End Sub
Private Sub button1_Click(sender As Object, e As EventArgs) If mbase.Position > 0 Then mbase.Position -= 1 End If End Sub Private Sub button2_Click(sender As Object, e As EventArgs) If mbase.Position < dt.Rows.Count Then mbase.Position += 1 End If End Sub Private Sub button3_Click(sender As Object, e As EventArgs) mbase.EndCurrentEdit() End Sub End Class
-
我用的是同样的方法啊。
又发现:您的代码中的这里
'绑定数据源
mbase = BindingContext(ds, "Test")
有错误提示:BindingContext是一个类型,不能用作表达式。我的方法是在文本框的数据源指定之后,再指定BindingManagerBase 的数据源。
textBox1.DataBindings.Add("Text", ds, "Test.name")
mbase = textBox1.BindingContext(ds, "Test")- 已编辑 fengqiwuyong 2012年9月26日 8:19
-
第二疑问已经解决了,是自己准备的控件数组溢出了。
前面一个还是没搞清楚。虽然也能运行。
- 已标记为答案 Mike FengModerator 2012年10月8日 11:34
-
第二疑问已经解决了,是自己准备的控件数组溢出了。
前面一个还是没搞清楚。虽然也能运行。
第一个蹊跷:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.bindingmanagerbase(v=vs.80).aspx 是一个虚类,当你实例化后,它必然有一个具体的类型,这个Relatedpropertymanager,就是这个具体的类型,而你的bindingmanagerBase只是一个父类。这个方法默认是返回当前实例的实际类型名
数据绑定.gettype().fullname.to.string
Mike Feng
MSDN Community Support | Feedback to us
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Mike FengModerator 2012年10月8日 11:34