23 Mar 2006
asp.net, programming
Starting to find my way around Asp.Net
I’m setting up a form for “forgotten password”. This is standard enough – give us your email address and we email you your password for the site.
This form has a single-line text input field (enter your email address here) and one button (Send Password). I want the button’s onsubmit event to be fired when if the user types in their email address and then (reasonably enough) presses the Enter key instead of groping for the mouse and clicking the big Send button. Works fine in Firefox, but not in IE. The form posts back, but I don’t get the OnSubmit event
Fix (and an excellent explanation) from the invaluable 4 Guys Obviously enough, I need to add another textbox – and since I don’t want another textbox I’ll make it invisible.
<asp:TextBox runat="server" style="visibility:hidden;display:none;" />
22 Mar 2006
asp.net, programming
The Page_Load event in one of my pages was not firing – I eventually tracked this down to the InitializeComponent function (inside the “Web Form Designer generated code” block) The following line, which should have been automatically generated, was missing :
this.Load += new System.EventHandler(this.Page_Load);
The trouble is that I tend to stay away from the design view and work almost exclusively in the HTML view. And in making a new page, based on an existing one, this vital line was omitted. Much frustration.
3 Mar 2006
mysql
Get a list of users and the most recent training course they have attended. This should be a very simple query with a sub-select, but I’m using MySQL 3.23 and sub-selects are not available, so queries have to be rewritten using joins. (Sub-selects are available from MySQL 3.24 onwards). Took me a while:
select
t1.*
from
usertraining as t1
left join usertraining as t2
on t1.user_id = t2.user_id and t1.training_date<t2.training_date
where
t2.training_date is null
This matches up the training courses. When the date is at its maximum (ie. the most recent) there are no matching dates in the joined table which are greater than that – so the t2 entries for that row are Null – and we use the where clause to pick out exactly those rows.
Another way to do it:
select
t1.*
from
usertraining as t1
left join usertraining as t2
on t1.user_id = t2.user_id
group by
t1.training_date having t1.training_date = MAX(t2.training_date)
where
t2.training_date is null
And of course, to get the user details is then very simple:
select
users.*, usertraining.*
from
users left join
usertraining as t1 ON users.user_id = t1.user_id
left join usertraining as t2
on t1.user_id = t2.user_id and t1.training_date
where
t2.training_date is null