Greg McGuffey
|
|
Group: Forum Members
Posts: 2K,
Visits: 6.6K
|
I'm glad you got it working Ian and thanks for all the help Edhy (the ListView guru)!
|
|
|
Edhy Rijo
|
|
Group: StrataFrame Users
Posts: 2.4K,
Visits: 23K
|
Congratulations!
Edhy Rijo
|
|
|
Ian Hammond
|
|
Group: Forum Members
Posts: 57,
Visits: 277
|
This issue is now resolved, I have since discovered the PopulateThroughEvent setting.
|
|
|
Edhy Rijo
|
|
Group: StrataFrame Users
Posts: 2.4K,
Visits: 23K
|
Very good Ian. You don't need to do anything in the RowPopulating event. I understand you want to display the ComputerName and LoggeIn values which are not part of the hlsUserProfilesBO1 BO, if so, you need to create those Custom Field Properties and suggested by Greg in the hlsUserProfilesBO1 BO, then in the ListView Populating Settings, you need to add those fields to the "Display Fields" listbox and then reference them in the "Columns" listbox with their index values (take a look at the image below). P.S. There are many ways to do this. Look in the forums for Custom Field Properties, also in the help file.
Edhy Rijo
|
|
|
Ian Hammond
|
|
Group: Forum Members
Posts: 57,
Visits: 277
|
Hi,
That info made quite a difference, thanks. I am still having problems populating the computerName and Logged in columns. I have used the listView row populating event as shown below:
private void listViewUserNames_RowPopulating(MicroFour.StrataFrame.UI.Windows.Forms.RowPopulatingEventArgs e)
{
HLSUserNamesBO loBO= (HLSUserNamesBO)e.BusinessObject;
this.hlsUserProfilesBO1.FillProfileByUser(loBO.userId);
// e.Values[2].DisplayValue= this.hlsUserProfilesBO1.computerName;
// e.Values[3].DisplayValue= this.hlsUserProfilesBO1.loggedIn.ToString();
}
I have commented out the DisplayValue because they cause the exception:
Object reference not set to an instance of an object.
The e.Values has a count of zero.
I can't see what the demo does that I'm not can you please advise.
|
|
|
Edhy Rijo
|
|
Group: StrataFrame Users
Posts: 2.4K,
Visits: 23K
|
Hi Iam, The listview has a property named AutoNavigateToSelectedRecord, if you set this to True, you can then just reference the BO and no need to seek the record. Here are the settings I use for the ListView: - I drop an instance of the BO I will use in the ListView in the fom. I do this so I can manipulate the data in the BO instead of the ListView where I may not have all the fields I need to work with.
- PopulationDataSourceSettings (Method to Execute) CopyDataFrom(BusinessLayerBase,BusinessCloneDataType). Make sure the "Tag Field" is the PK of your table.
- When using the population type in #2, you must tell the ListView to use the BO in step 1, so do this in the ListPopulating event using code like this (sorry VB)
e.Parameters(0).Value = Me.BizTransactionItems1 e.Parameters(1).Value = MicroFour.StrataFrame.Business.BusinessCloneDataType.ClearAndFillFromDefaultView
- AutoNavigateToSelectedRecord = True
- BusinesObject = the one dropped in step 1.
- ChildForm = whatever childformdialog you will be using.
Make sure you populate your BO either manually or at the form load.
Edhy Rijo
|
|
|
Ian Hammond
|
|
Group: Forum Members
Posts: 57,
Visits: 277
|
Thanks for the suggestion, I have decided to try the ListView route. I have used the ChildDialogFormSample as a guide. I have it partially functioning. The issues I have at the moment are:
1) My computer name and logged in values are not displayed.
2) My call to SeekToPrimaryKey(list.SelectedItems[0].Tag) seems to generate an exception, it seems that it can't find the record with the index value, which I have confirmed is in the table.
I would appreciate a shove in the right direction on this, many thanks.
|
|
|
Greg McGuffey
|
|
Group: Forum Members
Posts: 2K,
Visits: 6.6K
|
Ian,
First I would reinforce Edhy's suggestion that unless you need in-place editing, a ListView is much easier to user, much lighter weight. The SF ListView also has all the goodness Edhy mentioned related to easily hooking the ListView up to ChildFormDialogs etc.
However, to address your problem, the most common cause for this is that the column doesn't have the correct value in it (i.e. it can't be cast to a boolean). I'd set a break on the line that loads the BO and then step through it, looking at the data table. Since this works when you load it, you must be doing something a bit differently when you refresh grid. You might also set a break in the get of the loggedIn property and see what the data table looks like (get_loggedIn is the method generated by the compiler for the get of a property).
|
|
|
Edhy Rijo
|
|
Group: StrataFrame Users
Posts: 2.4K,
Visits: 23K
|
Hi Ian, Not that my suggestion will resolve the problem with the DataGrid, but unless you need to modify data in the grid itself, I would use a ListView. StrataFrame ListView is greatly automated to handle the BO, a childForm dialog and it is very easy to setup. The ListView can even move the record pointer in the BO if you want it to. There are plenty of samples on how to use the ListView and also the StrataFlix sample application uses a listview and childform dialogs the way I believe you want it to. If you want to go with the ListView and need some help, just let us know.
Edhy Rijo
|
|
|
Ian Hammond
|
|
Group: Forum Members
Posts: 57,
Visits: 277
|
Having sorted the problem with the data binding to custom fields I have come across the following issue:
On my dataview grid I have 4 columns, user name, description, computer name(custom) and logged in flag(custom)
The username,description are loaded from UserNameBO and computer name and logged in are loaded from UserProfilesBO.
I have 3 buttons Add User, Edit User, Delete User.
Edit User: This transfers control to another form that allows me to change parameters associated with the user. When I return to the calling form I reload the UserameBO to refresh the data view grid. I then get the error:
Thd following exception occurred in the DataGridView:
System.Reflection.TargetInvocationExceptions: Exception has bee thrown by the target of an invocation,-->
System.InvalidCastException: Specified cats is not valid.
at ........HLSUserNamesBO.get_loggedIn() followed by line no.
I presume this error is due the fact that the computerName and loggedIn are not being refreshed when I refresh the usernames. Could anyone throw some light on this issue, or is there some event I should be setting similar to the parentLoading.
Many thanks
|
|
|