Dashboard grid does not update on refresh

I have created a dashboard with 2 sheets. The main sheet displays values from a UD table (UD105). The second sheet displays values from the child table (UD105A) filtered on the Key1 value of UD105. When I initially refresh the screen, both sheets populate properly. If I then click the refresh button on the toolbar, the main sheet populates, but the second sheet does not. I have tried multiple ways to resolve this, but nothing seems to render the needed results. If I physically select a row on the main sheet other than Row[0] and then select Row[0], all is well. If Row[0] is currently Active/Selected and I click refresh, nothing in the second sheet. The problem is that the main sheet will frequently have one row and need to be refreshed. I have tried to add a customization and used the following code, but it doesn’t affect the second sheet:

	private void thisForm_AfterToolClick(object sender, AfterToolClickEventArgs args)
	{
		//EpiMessageBox.Show(string.Format("thisForm_AfterToolClick:Tool: '{0}'", args.Tool.ToString()));
		switch(args.Tool.ToString())
		{
			case "[ClearTool] - ButtonTool":
				break;
			case "[RefreshTool] - ButtonTool":
				myGridPutAway.BeginUpdate();
				myGridPutAway.SuspendRowSynchronization();
				myGridPutAway.Selected.Rows.Clear();
				myGridPutAway.Rows[0].Activate();
				myGridPutAway.Rows[0].Selected = true;
				myGridPutAway.ResumeRowSynchronization();
				myGridPutAway.EndUpdate();
				break;
		}
	}

Is there a (better) way to do this using the dataview?
Thanks in advance for any ideas/experience you can pass on.

Don’t know about better, but each UD table comes with its own application to manage it. You just add it to the menu and then you can customize it. For the UD*A tables, it comes with the parent-child panels already done for you.

You can make it Read-Only in the menu as well.

Mark W.

Wondering if you could do “Refresh All”?

image

@Mark_Wonsil. I originally had to join it with a few other tables so I went down the dashboard route. Once the requirements for the other data were removed, I wish I had thought of this. But now that I have it and all that is really left is to resolve the refresh issue, I will maintain this path until I can’t get it figured out. :slight_smile:
Thanks!

@snguyen hmmm, I don’t see a Refresh All button, nor do I see a RefreshAll method through reflection?

@JimF it is in Dashboard General tab

@snguyen - Doh! Thank you. OK, enabled the Refresh All button, but still the same results. It seems that once the top row becomes the ActiveRow, there is no way to reset that (and subsequently refresh/repaint the 2nd sheet) without physically selecting another row on the first. I also can’t find anything that will do it programatically.

Any other experience/ideas would be greatly appreciated. Thanks again.

I found something that makes this even stranger. When I run it from the Dashboard program it works. Secondary sheet updates as it should, on refresh as well. So as a test, I ran the dashboard as runtime instead of as assembled and sure enough, it works fine. It is only when it is assembled that this querky behavior shows up. The issue is that I have to pass information from this dashboard to the Inventory movement form, so it has to be assembled so I can add the customization code, correct? Has anyone seen this sort of behavior before?

this is just thought-process.

  1. 1st sheet add baq and publish 1 column (lets say column Company ID)
  2. 2nd sheet add baq and subscribe company id from 1st sheet.

this works?

Hi Jim,

While I’m not currently experiencing the same issue as you, yes I have seen assembled vs runtime dashboards act unexpectedly different. Also, I have definitely seen “quirky” with dashboards, from E9 and now in 10.1. For example, I am currently working on a dashboard, which I think I will need to keep as runtime because users need to be able to right click and download to Excel and when I make the assembly to do it, if there are line feeds field then the record goes over one row in the excel sheet. Runtime doesn’t do that. However, I need to add another prompt for a filter, and aw, it’s too late ~ I didn’t do it when I first added the tracker view and now the program won’t treat the criteria normally when I customize tracker view, so whoops, gotta go back and rebuild the tracker view. I know we’re not the only ones seeing “quirky” dashboard behavior, per these posts:

Anyway, welcome to Monday morning :slight_smile:

Nancy

Thank you @prakash for the thought. That is actually the way it is currently designed.

Thank you @Nancy_Hoyt for the elaborate response. It’s funny you mention the runtime vs assembled issue as we had the exact opposite thing happen here. We had a runtime dashboard that a user needed to export to Excel. It kept resulting in various rows running over, so I tried assembling it and sure enough, the issue went away. Go figure.
After a few days of fighting with this, I finally fixed it with some (as a long-time .NET programmer I am not proud of this) at best kludgy out of the box thinking. The short answer is that I created a “dummy” record in the table that will always have a value that will qualify to be on the dashboard. I use customization code to hide the record on the grid. Whenever a refresh is executed, I change the ActiveRow to my dummy record, then change it to row 0, if there is a row to display. Works like a champ. No flicker or anything. So until I find something better, that’s my story and I’m sticking to it. :slight_smile:
One side problem I had to remember though. I create a weekly spreadsheet that uses the same query that the dashboard uses. I had to fix the query to not display my dummy record.

Thanks again.

Jim

2 Likes

have you mapped any other field other than company such as key1? can you post the dashboard here?

i had similar situation. due to time crunch and to make it consistent, applied customisation like below

  1. create sheet 1 adding a baq (baq name: ABC referring to UD01 )
  2. create sheet 2 adding a dummy baq (lbaq name: DEF referring to UD01A returning only 1 row )
    2.1) create actual baq GHE with parameters like key1 and key2 and company
  3. deploy dashboard as dashboard assembly add to menu maintenance
  4. open dashboard in developer mode and create a customization layer
  5. insert epidataview notification for the 1st baq lets call “epidataviewABC”
    5.1) when “epidataviewABC” has more than 1 record, run programmatically BAQ GHE in the code passing the parameters by getting related key fields data (key1/key2) from epidataviewABC in a dataset lets say dsUD01Child
    5.2) hack Sheet 2 DEF baq grid datasource by GetNativeControlReference
    5.3) replace datasource of the Sheet 2 grid with dsUD01Child

i know this is bit ugly, but works consistently.

2 Likes

@prakash as you can see in my answer to @Nancy_Hoyt, ugly is what I ended up doing as well. I will say I like your ugly better. :slight_smile:
I am having to move on from this project, but I will try yours in a test database when I can and I will try to circle back here with an answer when I do.

Thanks.

Jim