A while back I posted a method to highlight rows on mouse over in Infragistics UltraWebGrid. Over the time turned out that it had several limitations the main being: if you enable additional styling for some elements of the grid, they're not preserved after mouse-over/mouse-out events. For example if you set a SelectedRowStyleDefault property with a different background and then move mouse over a selected row - that style will be removed.
So, here's a complete solution to work around that limitation: Read more...
IE6 just won't die. I know, continue to support it is a bad idea, but unfortunately many developers have no choice, some environments, especially corporate intranet will continue to use it until second coming (and then Safari will rule the world).
So, here is a small tip: If you need to use a named color from CSS3+ specification that old tired browser doesn't understand - just use color's hex equivalent instead. For example instead of
style="border: solid 1px LightGray;"
which will do nothing in IE6 use
style="border: solid 1px #d3d3d3;"
which will render nice light-gray border.
Hyperlinks are designed for clicking, to lead you somewhere else, but sometimes this behavior is undesired. In my case a grid control displayed some HTML data in its cells (including hyperlinks) and clicking on those links caused some undesired effects. I still wanted to display HTML and allow clicking on other grid elements (e.g. checkboxes) just needed a way to prevent hyperlinks clicks.
Remember that events bubble? That gave me an idea to wrap the grid control in a DIV to catch click events. This way I can check event source and if it's a hyperlink - cancel the event, otherwise allow it. Well that's pretty much it. Here's a stump for the DIV wrapper:
<div onclick="return checkClickSrc()">
<!-- Controls to check go here-->
</div>
and here's the JavaScript code that does the check:
function checkClickSrc() {
return event.srcElement.tagName != 'A'
//for firefox: return event.target.tagName != 'A'
}
If you're binding an ADO.NET DataTable to Infragistics UltraWebGrid and then programmaticaly sort the grid (e.g. add a column to a band's SortedColumns collection) you may get an error:
Cannot find column My Column Name.
with stack trace starting from grid databinding and finishing in datatable's sorting:
at System.Data.DataTable.ParseSortString(String sortString)
at System.Data.DataView.CheckSort(String sort)
at System.Data.DataView.set_Sort(String value)
at Infragistics.WebUI.UltraWebGrid.DBBinding.ProcessDataViewForFillRows(DataView dataView, RowsCollection rows)
at Infragistics.WebUI.UltraWebGrid.DBBinding.FillRows(UltraWebGrid grid, RowsCollection rows, IEnumerable datasource)
at Infragistics.WebUI.UltraWebGrid.DBBinding.BindList(IEnumerable datasource)
at Infragistics.WebUI.UltraWebGrid.DBBinding.DataBind(Object dataSource, String dataMember)
at Infragistics.WebUI.UltraWebGrid.UltraWebGrid.DataBind()
If the grid binds OK without sorting and grouping, but fails with either - most likely the culprit is one of the columns in data table. Read more...
In the previous post I described how using QuickPages property and a bit of creative HTML enhanced pager for Infragistics UltraWebGrid could be created. The only problem with QuickPages - the pager in this mode displays inconsistent number of page links. For example if you set QuickPages property equal 5, the pager will display from 5 page links (when you're at the beginning or at the end of the grid) to 11 (when you're in the middle). If you want that number to be consistent, you have to draw the page links yourself. Which turned out is surprisingly easy. Read more...
Infragistics UltraWebGrid offers rich set of features, among which paging of large sets of data. But if your total-number-of-records/records-per-page ratio is too high you will end up with way too many page links. And it doesn't look pretty:

UltraWebGrid offers some out-of-the-box solutions for this problem. Read more...
When you design columns for UltraWebGrid, one of the settings available to you is Column Type. For example you can set it to Button, and all cells within the column will render and behave as HTML buttons. Other options available such as Check Box or Hyperlink.
But what if you want some of the column cells to be of a different type? For example some of cells aren't supposed to be links, but plain text instead? The solution is to set Column Type of those cell thru code. Consider following example:
Protected Sub xmyGrid_InitializeRow(ByVal sender As Object, ByVal e As RowEventArgs) Handles xmyGrid.InitializeRow
If e.Row.Index > 0 Then
e.Row.Cells.FromKey("LINK_CELL).TargetURL = "http://mysite.com?ID=" & e.Row.Cells.FromKey("LINK_ID)
Else
e.Row.Cells.FromKey("OBJ_NAME").Column.Type = ColumnType.NotSet
End If
end sub
Above is a handler for UltraWebGrid's InitializeRow event. It checks if a row is a first row in the grid and if so - sets its column type to "NotSet" effectively removing "Hyperlink" type set at design time. And even though it references type of entire column - the change applies only to the current cell.
A standard situation - ComboBox control of VB.NET WinForm is populated with some data in Form_Load event and index is set to -1 so no item is selected:
Private Sub xfrm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
xCombo.DataSource = GetSomeData()
xCombo.SelectedIndex = -1
End Sub
Then, when user actually selects an item - SelectedIndexChanged event handler is called to perform action on the selected item:
Private Sub xCombo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles xCombo.SelectedIndexChanged
PerformSomeAction(xCombo.SelectedValue)
End Sub
The problem with this approach is when data is bound in Form_Load - SelectedIndexChanged event handler is also called, and when SelectedIndex is set to -1, SelectedIndexChanged event is called again. Since we expect the SelectedIndexChanged to run only when user selects an item - this behavior may cause unwanted consequences.
The solution is Read more...
November 19th, 2009
Yuriy
Last year I described a way to display accurate row count when grid in OutlookGroupBy mode has multiple sub-groups.
That solution requires custom counting function. Fortunately to display aggregates such as SUM, AVG, MIN and MAX UltraWebGrid has a built-in functionality in form of GroupByRowDescriptionMaskDefault property of DisplayLayout. It specifies the string to be displayed in every GroupBy row and can include following substitutes:
- [caption] - will display GroupBy column header text
- [value] - will display common to the group cell value
- [count] - will display row count (does not work correctly with sub-groups)
- [avg], [sum], [min], [max] - will display the aggregate for the column it's grouped by
- [avg:ColumnKey], [sum:ColumnKey], [min:ColumnKey], [max:ColumnKey] - will display the aggregate for any other column, where ColumnKey is the key of the column
With this in mind in just a few simple steps we can make UltraWebGrid to display something like this:

Read more...
All browsers support "View page source" feature. But what it displays is source of the page as it was originally rendered by the server. In today's Web 2.0 world page content can change a thousand times after that. Client-side script, user input, AJAX calls can contribute to page update.
But one line of JavaScript code can show you a real up-to date page source. Type following in your browser address bar:
javascript:void prompt('HTML Source',document.documentElement.innerHTML)
Read more...
Recent Comments