I was demoing the Grid's Alphabet button search and thought I'd try to disable those Alphabet buttons that would produce no records in a search. This code will do this and you can change the style of the button.
There's probably better events to use than I did, but I just wanted to know if it were easily possible... and kinda just get it done. I'm searching against is a SQL Server Join statement of two tables just a bit over 11,000 records.
I've read about better methods for searches against large record numbers, but this will do for now. There isn't any error checking in the Xbasic yet.
First, in your Grid, in the Server-side event, OnAfterExistingRowRender: Here we're going after the sql tables and returning DISTINCT LEFT(fieldname,1)... so... should be a maximum of 1 row for each letter of the Alphabet plus numbers After we get the results, turn the resultset into a CRLF string with ToString, and then turn the CRLF string into a comma delimited string. Finally return the string to Javascript in a global variable. This is actually the reason I used this event... because I can return Javascript and therefore create the Javascript variable.
Next, in the Client-side event, onGridRenderComplete: Here we're grabbing the Alphabetbuttons DIV, and then grabbing all the specific buttons themselves, under the DIV. Next... since we have our "searchLetters" variable containing all our valid search Letters, compare each of the Alphabetbutton letters to our valid search Letters. If there's a hit, turn the letter Green. No hit... disable it and turn it red.
And Finally... take the exact same Javascript code above and put it into the Client-side event afterAlphabetButtonSearch because after your search everything goes back to it's original state.
That's it. I just love this stuff... what can't you do in Alpha 5!
There's probably better events to use than I did, but I just wanted to know if it were easily possible... and kinda just get it done. I'm searching against is a SQL Server Join statement of two tables just a bit over 11,000 records.
I've read about better methods for searches against large record numbers, but this will do for now. There isn't any error checking in the Xbasic yet.
First, in your Grid, in the Server-side event, OnAfterExistingRowRender: Here we're going after the sql tables and returning DISTINCT LEFT(fieldname,1)... so... should be a maximum of 1 row for each letter of the Alphabet plus numbers After we get the results, turn the resultset into a CRLF string with ToString, and then turn the CRLF string into a comma delimited string. Finally return the string to Javascript in a global variable. This is actually the reason I used this event... because I can return Javascript and therefore create the Javascript variable.
Code:
dim cn as sql::Connection dim args as sql::Arguments dim rs as sql::ResultSet dim currUser as C sql = "SELECT DISTINCT LEFT(Customers.CompanyName,1) as alphaCmpyName FROM WorkOrders WorkOrders INNER JOIN Customers Customers ON WorkOrders.CustomerId = Customers.CustomerID ORDER BY alphaCmpyName" cn.open("::name::your_connection_name_goes_here") cn.PortableSQLEnabled = .t. dim cmpyLetters as c = "" cn.Execute(sql) rs = cn.ResultSet cmpyLetters = crlf_to_comma(rs.ToString()) cn.FreeResult() cn.close() e.javascript = "searchLetters = '" + cmpyLetters + "';"
Next, in the Client-side event, onGridRenderComplete: Here we're grabbing the Alphabetbuttons DIV, and then grabbing all the specific buttons themselves, under the DIV. Next... since we have our "searchLetters" variable containing all our valid search Letters, compare each of the Alphabetbutton letters to our valid search Letters. If there's a hit, turn the letter Green. No hit... disable it and turn it red.
Code:
//The variable 'searchLetters' comes from the Server-side event OnAfterExistingRowsRender var myDiv = document.getElementById( "{grid.componentname}.GRID_PART.ALPHABETBUTTONS" ); var inputArr = myDiv.getElementsByTagName( "button" ); for (var i = 0; i < inputArr.length; i++) { var str=searchLetters; var n=str.search(inputArr[i].innerHTML); if (n == -1) { $(inputArr[i]).disabled = true; $(inputArr[i]).style.color = 'red'; } else { $(inputArr[i]).style.color = 'green'; } }
That's it. I just love this stuff... what can't you do in Alpha 5!
Comment