Session variable not taking effect in asp.net - asp.net

I have a session variable in my asp.net application. The session variable holds a value from the database, that reflects a customized HTML color value.
In my application, I have an asp button with server side code
btnContinue.BackColor = System.Drawing.Color.FromName(Session("ContinueColor"))
Issue: However, when I run the application, the color value is not being reflected in the button.
I did double check, and the session variable does hold the correct value.
There are other objects, that use session variables to display colors, and they are working fine.
How can I resolve this issue?
Update: When I force a color "btnContinue.BackColor = Drawing.Color.Blue", that works perfectly fine.

If it's a hex code, you might want to use ColorTranslator instead:
btnContinue.BackColor = System.Drawing.ColorTranslator.FromHtml(Session("ContinueColor").ToString());
Looking at the color information you posted in your comment, I think you just need to cast the session object as type Color:
btnContinue.BackColor = DirectCast(Session("ContinueColor"), System.Drawing.Color)
EDIT
I found the solution:
btnContinue.BackColor = System.Drawing.Color.FromName("{Name=48E8DD, ARGB=(0, 0, 0, 0)}")
In your case, it would be:
btnContinue.BackColor = System.Drawing.Color.FromName(Session("ContinueColor").ToString())

Which part of the page life cycle are you setting the color? Maybe the session data has not been read yet? Session should be ready after PageLoad.
I recommend setting a break point immediately after this line of code to make sure nothing else is overriding it - theme.
btnContinue.BackColor = System.Drawing.Color.FromName(Session("ContinueColor"))

Related

How to update mark a form dirty after a server side modification

I don't understand how to make the Client ui aware of a server side change in a document.
My use case is the following : I'm adding a button to my form, that calls a custom document method :
In MyDocType.py, I have :
class MyDocType(Document):
#frappe.whitelist()
def change_some_value_in_doc(self):
self.the_field_i_want_to_change = 50
It work in the sense that the_field_i_want_to_change is immediately updated to the new value.
However, If I hit Save, I get the message "No changes in document". I managed to determine that this is because on the JS side, the form is not marked as "dirty", but despite reading the documentation over and over, I cannot find the right way.
I tried with self.notify_update() which seems to have no effect.
Is it a bug ? Or am I misunderstanding how this is supposed to work ?
I'm using frappe v 14.0.0-beta.3
[EDIT]
Actually, I realized that doing
class MyDocType(Document):
#frappe.whitelist()
def change_some_value_in_doc(self):
self.the_field_i_want_to_change = 50
self.save()
Does work in the sense that it save the new value, but it's not exactly what I'm looking for, because my purpose is actually to pre-fill some data with the custom method and leave to the user to complete before saving...
Any help to get me in the right direction would be very appreciated.
To pre-fill data in your form - that you want the user to confirm before saving to the database, you should use client-side scripting (in JS). Changing the value on the server is not going to help you since you want the user to get pre-filled values before inserting a record in the database.

How to refresh after changing ValueNumericOptions.Format?

I'm using the DevExpress xtraChart to display some data. In the CustomDrawSeries event, I'm checking the series name and changing SeriesTemplate.Label.PointOptions.ValueNumericOptions.Format. It works... partially.
The idea is to change ValueNumericOptions.Format from NumericFormat.FixedPoint to NumericFormat.Percent and vice versa based on the name. The problem is the change is not displayed immediately. In order to see the change, the user must select another cell and then the change is visible immediately.
How can I force a refresh to the series and see the changes immediately without needing to select another cell?
Update -
After the change is made via code, I inspected Format and it is being set correctly. This confirms, in my mind anyway, this is a refresh issue.
I do not know what the real cause of the problem, but your approach seems to be not quite optimal. You modify the global settings (template) while your goal is just to change settings for a certain series.
What you want to achieve can be done during the ChartControl initialization, without having to handle events. The following code can be used to apply a percent format to a certain series:
DevExpress.XtraChartsPointOptions pointOptions = new DevExpress.XtraChartsPointOptions();
pointOptions.ValueNumericOptions.Format = DevExpress.XtraCharts.NumericFormat.Percent;
DevExpress.XtraCharts.SideBySideBarSeriesLabel label = new DeveExpress.XtraCharts.SideBySideBarSeriesLabel();
label.PointOptions = pointOptions;
DevExpressXtraChartsSeries series = xtraChart1.Series["Series Name"];
series.Label = label;
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
By the sounds of it you are registering to the Refresh event of the view controller which will change the format of the chart on refresh, assign your code also in the OnViewControlsCreated event to initialize your code upon first creating the view.

Hiding LinkButton

In VB.NET, I have a LinkButton that, when clicked, creates a report. We want to disable this functionality based on whom is logged into the system. I have a session variable to indicate whether this should be visible or not but when I set idLinkButton.visible = False, it has no effect. Any ideas on what I need to do to be able to turn this on and off?
'code-behind
' in page_load
If Not Convert.ToBoolean(HttpContext.Current.Session("HideReports")) Then
PDFbutton.Visible = True
Else If Convert.ToBoolean(HttpContext.Current.Session("HideReports")) And HttpContext.Current.Session("LoadFromConsole") Then
PDFbutton.Visible = True
end if
First, have you tried setting .Visible = false outside the if/then logic?
If that works, then you want to troubleshoot the logic. Add my first line to what you show above, then change your first line to my second line.
Dim hideRpt as Boolean = Convert.ToBoolean(HttpContext.Current.Session("HideReports"))
If Not hideRpt Then
Now put a breakpoint on the "If Not..." line.
If you aren't getting what you expect, add another line to get a string for the session value, to make sure it really should convert to a bool.
Basic troubleshooting, man, break it down into smaller parts. Sometimes I'll start a fresh windows app just to have a blank slate on which to work out details.

how to use QTable::editCell()

I don't understand how QTable::editCell() should be used. I am trying to do some error checking based on entries made by user in a QTable as mentioned in my another question.
I would like to give user an opportunity to re-edit the cell which has error. For example, if name column entry has some special characters such as '(', the user should be prompted for the error and the control should go back to same cell in edit mode. I tried using QTable::editCell() in my code as shown below.
Table->editCell(row, 0, TRUE);
name = Table->text(row, 0);
However, this doesn't work as expected. The control doesn't stay in the cell at all and obviously the name is not correctly collected. So, my question is how to ensure from within code that a cell of QTable can be edited so that the edited contents can be accessed immediately in next statement (as shown in above code).
Note: I am working with qt 3.3.8 only.
I don't think you can do that. You'll have to go back to the event loop, and wait for one of the signals (like valueChanged(row,col)) to be fired to re-validate the data.
A blocking wait on a GUI object is often not a good approach (except for modal dialogs).
I know I'm a little late here but you should use the following connect statement with your own custom function to do your specific needs such as below. You can also use this method to disable users from entering in special characters within you custom function. That way they wont ever have to correct undesirable characters.
connect(ui->tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(customFunction(int,int)));
void updateTable
{
//remove invalid characters
}

How to view Session Variables in Visual Studio 2008 Debugger?

Usually using Visual Studio's debugger is a breeze. Scanning through Locals quickly shows the values of variables, etc. However, I'm at a loss how to find out the values contained in session state variables? Can anyone give me a hand?
Let's say I put a breakpoint right after:
Session["first_name"] = "Rob Roy";
How do I view the value contained in Session["first_name"] from locals?
It's pretty simple to inspect the session during debug. Just put a breakpoint in your code and just highlight your Session code (eg. highlight: Session["first_name"]) then right click and select QuickWatch....
This will setup up a watch on your Session for the value you had defined. You can also inspect other Session elements by adjusting the Expression field in the QuickWatch window and clicking the Reevaluate button.
In VS you can just put 'Session["first_name"]' in the Immediate Window and execute while the code is running. That will return the value that it holds.
If you can't find it go to: View > Other Windows > Command Window, or press Ctrl+W, A
It will look like this:
I know its a bit of a late reply but for anyone else who is interested, I hope this helps!
Isn't it HttpContext.Current.Session("..."), I ask as I haven't used ASP.NET for a long time.

Resources