StrataFrame Forum

Need help decifering a concept...

http://forum.strataframe.net/Topic2156.aspx

By StarkMike - 8/11/2006

Can someone help me decifer this line of code? I saw it somewhere and have used it a couple of times but I'm not sure what the concept is called or why it works.



Me.cboDivisions.Properties.GetDataSourceRowByKeyValue(Me.cboDivisions.EditValue)("LocationID").ToString



If this piece of code were to take up two lines this is what it would look like this



Dim row As DataRowView = Me.cboDivisions.Properties.GetDataSourceRowByKeyValue(Me.cboDivisions.EditValue)

Messagebox.Show(row("LocationID").ToString)



I'm referring to the way I can butt the set of parenthesis together.



Thanks for the help. Cool
By StrataFrame Team - 8/11/2006

Hi Mike,

The reason you can butt the parenthasis together is because of the way the properties work.  It is the same concept as that of chaining together a bunch of dots, like this:

Me.TextBox1.Text

The first dot tells the "Me" variable that we are accessing one of its properties.  The second dot tells the TextBox that we are accessing one of its properties.

Now, there are special properties called "indexers."  An indexer is a "default" property that allows you to leave off the property name because it is understood.  So, When you execute the GetDataSourceRowByKeyValue(Me.cboDivisions.EditValue) method, it returns an instance to a DataRowView.  If you were to put a dot at the end of those parenthasis, you would be telling the DataRowView that you want to access it's properties.  So, you could do this: Me.cboDivisions.Properties.GetDataSourceRowByKeyValue(Me.cboDivisions.EditValue).Row which would return the DataRow wrapped by the DataRowView.  So, we combine this with the indexer property of the DataRowView item, which accepts a column name and returns the value within the field.  So, since the property is the indexer (its the "Item" propery), you can leave off the .PropetyName because it's understood.  So, the parenthasis are butted together because the ".Item" is understood, and therefore, left off.

Me.cboDivisions.Properties.GetDataSourceRowByKeyValue(Me.cboDivisions.EditValue)("LocationID").ToString()

Me.cboDivisions.Properties.GetDataSourceRowByKeyValue(Me.cboDivisions.EditValue).Item("LocationID").ToString()

By StrataFrame Team - 8/11/2006

In CSharp, the indexer properties cannot use the property name, but instead, they use the square brackets, so it looks like this instead:

this.cboDivisions.Properties.GetDataSourceRowByKeyValue(Me.cboDivisions.EditValue)["LocationID"].ToString();

By StarkMike - 8/11/2006

Thanks Ben! Good stuff!
By StrataFrame Team - 8/11/2006

No problem Smile