By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,552 Members | 905 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,552 IT Pros & Developers. It's quick & easy.

Databinding

P: n/a
Can someone explain to me the difference between these two bindings?

dim b as Binding

b=New Binding(dsMyDataset.tblMyTable, "colMyColumn")

b=New Binding(dsMyDataset, "tblMyTable.colMyColumn")

They produce different behavior in my application. I know which one I must
use, but I don't understand why.

Thanks for the help.
--
Pat
Nov 21 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
This is the cool thing about Winforms databinding ;-). Currency managers are
what controls your binding to datasources but depending on the *path* you
take to that datasource you will end up with different currency manager
references, hence, different views into your data. This allows you to decide
whether controls should be syncronized or not to the same exact source
object. So for example if we set up controls like this:

Me.TextBox1.DataBindings.Add("Text", MyDataset, "Customers.CustomerID")
Me.TextBox2.DataBindings.Add("Text", MyDataset, "Customers.CustomerName")

You end up with both controls bound through the same Currency manager. You
can see this by taking a look at the Bindings collection:

Dim CM As CurrencyManager = DirectCast(Me.BindingContext(MyDataset,
"Customers"), CurrencyManager)
Dim bindingsCount As Integer = CM.Bindings.Count '-- returns 2

Now if we did this:

Me.TextBox1.DataBindings.Add("Text", MyDataset, "Customers.CustomerID")
Me.TextBox2.DataBindings.Add("Text", MyDataset.Tables("Customers"),
"CustomerName")

In this case you will end up with two completely separate Currency managers
because the *path* to your data source is different even though both
controls will be editing the same table, Customers.

Dim CM1 As CurrencyManager = DirectCast(Me.BindingContext(MyDataset,
"Customers"), CurrencyManager)
Dim bindingsCount1 As Integer = CM1.Bindings.Count '-- returns 1

Dim CM2 As CurrencyManager =
DirectCast(Me.BindingContext(MyDataset.Tables("Cus tomers")),
CurrencyManager)
Dim bindingsCount2 As Integer = CM2.Bindings.Count '-- returns 1

The a currency manager maintains a view of the datasource so you can easily
access the current DataView as well as the current DataRowView:

Dim dv As DataView = DirectCast(CM.List, DataView)
Dim dvr As DataRowView = DirectCast(CM.Current, DataRowView)

You can obtain currency managers for any table/path in your dataset even if
there are no control bindings set (in that case the Bindings.Count would be
0). Complex winforms databinding can take some practice, but once you get
the hang of it you can create some very cool forms.

-B

"pmcguire" <pm******@discussions.microsoft.com> wrote in message
news:8E**********************************@microsof t.com...
Can someone explain to me the difference between these two bindings?

dim b as Binding

b=New Binding(dsMyDataset.tblMyTable, "colMyColumn")

b=New Binding(dsMyDataset, "tblMyTable.colMyColumn")

They produce different behavior in my application. I know which one I
must
use, but I don't understand why.

Thanks for the help.
--
Pat

Nov 21 '05 #2

P: n/a
Yes, I agree that the ability to create multiple currency managers against
the same DataSource is a powerful tool (I am only now getting into it in my
application; and the doors it opens are very interesting); however, this
implementation smells a little like an unintended feature. As I read your
response, your ability to create these independent CurrencyManagers is
limited by the number of unique paths to the same data element you can come
up with. It seems like just an explicit declaration of "New
CurrencyManager..." would be better.

As I said, I'm just now getting into this, so maybe I'm just not fully
appreciating the situation yet.

Thanks, though, for the explanation.

Pat

"Beth Massi [Architect MVP]" wrote:
This is the cool thing about Winforms databinding ;-). Currency managers are
what controls your binding to datasources but depending on the *path* you
take to that datasource you will end up with different currency manager
references, hence, different views into your data. This allows you to decide
whether controls should be syncronized or not to the same exact source
object. So for example if we set up controls like this:

Me.TextBox1.DataBindings.Add("Text", MyDataset, "Customers.CustomerID")
Me.TextBox2.DataBindings.Add("Text", MyDataset, "Customers.CustomerName")

You end up with both controls bound through the same Currency manager. You
can see this by taking a look at the Bindings collection:

Dim CM As CurrencyManager = DirectCast(Me.BindingContext(MyDataset,
"Customers"), CurrencyManager)
Dim bindingsCount As Integer = CM.Bindings.Count '-- returns 2

Now if we did this:

Me.TextBox1.DataBindings.Add("Text", MyDataset, "Customers.CustomerID")
Me.TextBox2.DataBindings.Add("Text", MyDataset.Tables("Customers"),
"CustomerName")

In this case you will end up with two completely separate Currency managers
because the *path* to your data source is different even though both
controls will be editing the same table, Customers.

Dim CM1 As CurrencyManager = DirectCast(Me.BindingContext(MyDataset,
"Customers"), CurrencyManager)
Dim bindingsCount1 As Integer = CM1.Bindings.Count '-- returns 1

Dim CM2 As CurrencyManager =
DirectCast(Me.BindingContext(MyDataset.Tables("Cus tomers")),
CurrencyManager)
Dim bindingsCount2 As Integer = CM2.Bindings.Count '-- returns 1

The a currency manager maintains a view of the datasource so you can easily
access the current DataView as well as the current DataRowView:

Dim dv As DataView = DirectCast(CM.List, DataView)
Dim dvr As DataRowView = DirectCast(CM.Current, DataRowView)

You can obtain currency managers for any table/path in your dataset even if
there are no control bindings set (in that case the Bindings.Count would be
0). Complex winforms databinding can take some practice, but once you get
the hang of it you can create some very cool forms.

-B

"pmcguire" <pm******@discussions.microsoft.com> wrote in message
news:8E**********************************@microsof t.com...
Can someone explain to me the difference between these two bindings?

dim b as Binding

b=New Binding(dsMyDataset.tblMyTable, "colMyColumn")

b=New Binding(dsMyDataset, "tblMyTable.colMyColumn")

They produce different behavior in my application. I know which one I
must
use, but I don't understand why.

Thanks for the help.
--
Pat


Nov 21 '05 #3

P: n/a
I didn't mention it in my first post, but you can create as many cm's to the
datasources as you want by creating different DataView references and bind
to them instead. So it isn't limited.

Dim dv1 As New DataView(myDataSet.Table1)
Dim dv2 As New DataView(myDataSet.Table1)
Dim dv3 As New DataView(myDataSet.Table1)
Dim dv4 As New DataView(myDataSet.Table1)
Dim dv5 As New DataView(myDataSet.Table1)
'-- These will be different currency managers
Dim cm1 As CurrencyManager = DirectCast(Me.BindingContext(dv1),
CurrencyManager)
Dim cm2 As CurrencyManager = DirectCast(Me.BindingContext(dv2),
CurrencyManager)
Dim cm3 As CurrencyManager = DirectCast(Me.BindingContext(dv3),
CurrencyManager)
Dim cm4 As CurrencyManager = DirectCast(Me.BindingContext(dv4),
CurrencyManager)
Dim cm5 As CurrencyManager = DirectCast(Me.BindingContext(dv5),
CurrencyManager)

"pmcguire" <pm******@discussions.microsoft.com> wrote in message
news:97**********************************@microsof t.com...
Yes, I agree that the ability to create multiple currency managers against
the same DataSource is a powerful tool (I am only now getting into it in
my
application; and the doors it opens are very interesting); however, this
implementation smells a little like an unintended feature. As I read your
response, your ability to create these independent CurrencyManagers is
limited by the number of unique paths to the same data element you can
come
up with. It seems like just an explicit declaration of "New
CurrencyManager..." would be better.

As I said, I'm just now getting into this, so maybe I'm just not fully
appreciating the situation yet.

Thanks, though, for the explanation.

Pat

"Beth Massi [Architect MVP]" wrote:
This is the cool thing about Winforms databinding ;-). Currency managers
are
what controls your binding to datasources but depending on the *path* you
take to that datasource you will end up with different currency manager
references, hence, different views into your data. This allows you to
decide
whether controls should be syncronized or not to the same exact source
object. So for example if we set up controls like this:

Me.TextBox1.DataBindings.Add("Text", MyDataset, "Customers.CustomerID")
Me.TextBox2.DataBindings.Add("Text", MyDataset, "Customers.CustomerName")

You end up with both controls bound through the same Currency manager.
You
can see this by taking a look at the Bindings collection:

Dim CM As CurrencyManager = DirectCast(Me.BindingContext(MyDataset,
"Customers"), CurrencyManager)
Dim bindingsCount As Integer = CM.Bindings.Count '-- returns 2

Now if we did this:

Me.TextBox1.DataBindings.Add("Text", MyDataset, "Customers.CustomerID")
Me.TextBox2.DataBindings.Add("Text", MyDataset.Tables("Customers"),
"CustomerName")

In this case you will end up with two completely separate Currency
managers
because the *path* to your data source is different even though both
controls will be editing the same table, Customers.

Dim CM1 As CurrencyManager = DirectCast(Me.BindingContext(MyDataset,
"Customers"), CurrencyManager)
Dim bindingsCount1 As Integer = CM1.Bindings.Count '-- returns 1

Dim CM2 As CurrencyManager =
DirectCast(Me.BindingContext(MyDataset.Tables("Cus tomers")),
CurrencyManager)
Dim bindingsCount2 As Integer = CM2.Bindings.Count '-- returns 1

The a currency manager maintains a view of the datasource so you can
easily
access the current DataView as well as the current DataRowView:

Dim dv As DataView = DirectCast(CM.List, DataView)
Dim dvr As DataRowView = DirectCast(CM.Current, DataRowView)

You can obtain currency managers for any table/path in your dataset even
if
there are no control bindings set (in that case the Bindings.Count would
be
0). Complex winforms databinding can take some practice, but once you get
the hang of it you can create some very cool forms.

-B

"pmcguire" <pm******@discussions.microsoft.com> wrote in message
news:8E**********************************@microsof t.com...
> Can someone explain to me the difference between these two bindings?
>
> dim b as Binding
>
> b=New Binding(dsMyDataset.tblMyTable, "colMyColumn")
>
> b=New Binding(dsMyDataset, "tblMyTable.colMyColumn")
>
> They produce different behavior in my application. I know which one I
> must
> use, but I don't understand why.
>
> Thanks for the help.
> --
> Pat


Nov 21 '05 #4

P: n/a
Pat,

The trouble is that with seeing this code I don't know as I earlier asked
what goes wrong and as well not what you want to achieve.

The second is that it is about a strongly typed dataset, what I never use
and therefore for me a little bit extra difficult to understand what goes
wrong.

Therefore tell me first a little bit what you want.

Probably you get no answer more today, I have to go however maybe somebody
else sees it than..

Cor
Nov 21 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.