I'm still evaluating the grid .... please bear with me .... :)
I have created a DataBoundGrid, whose datasource is a dataview of about 300 records.
I want to be able to selectively format the cells based on their contents. If I use the PrepareViewStyleInfo event the grid hangs.
I guess I'm using the wrong event - or am I using the wrong grid?
Private Sub GridDataBoundGrid1_PrepareViewStyleInfo(ByVal sender As Object, ByVal e As Syncfusion.Windows.Forms.Grid.GridPrepareViewStyleInfoEventArgs) Handles GridDataBoundGrid1.PrepareViewStyleInfo
Dim dv As DataView = CType(Me.GridDataBoundGrid1.DataSource, DataView)
Dim drv As DataRowView = dv.Item(e.RowIndex)
Dim row As dsJFinancials.JournalRow = CType(drv.Row, dsJFinancials.JournalRow)
If row.Idnote = "C" Then
Me.GridDataBoundGrid1.GridBoundColumns("Ino").StyleInfo.TextColor = Color.Red
ElseIf row.Idnote = "D" Then
Me.GridDataBoundGrid1.GridBoundColumns("Ino").StyleInfo.TextColor = Color.Black
End If
If row.RunningBalance < 0 Then
Me.GridDataBoundGrid1.GridBoundColumns("RunningBalance").StyleInfo.TextColor = Color.Red
End If
End Sub
Another question - I've created an XPToolBar, and added a ComboBoxBarItem - is there no way of providing a datasource and datamember for the ComboBoxBarItem.
One last question - I previously wrote a control which overrides the standard ComboBox. This control is used extensively through various projects. I want to replace it with your (far superior) ComboBoxExt. I tried writing a wrapper for the ComboBoxExt so that it would expose the native Combobox events, SelectedIndexChanged etc. Most of these events are avaialble in your ListControl, but there are many methods and events of the original ComboBox that your control do not expose, i.e. SelectedIndexChanged, SelectedValueChanged, DataSourceChanged, Items, etc.
While I would like in due course to upgrade my existing applications to use your controls, I would like to be able to do it gradually. Is there some way that I can map the original methods/events to your control, or would I have to change the source code (something I don't feel comfortable doing)?
Many thanks in advance
Jeremy Holt
AD
Administrator
Syncfusion Team
April 15, 2003 07:09 PM UTC
Hi Jeremy,
change your PrepareViewStyleInfo code so that it makes changes in the e.Style object and do not make changes to the grid. This would cause recursively calling this method otherwise:
Something like this should work:
if e.ColIndex = Me.GridDataBoundGrid1.NameToColIndex("Ino") then
If row.Idnote = "C" then
e.StyleInfo.TextColor = Color.Red
ElseIf row.Idnote = "D" Then
e.StyleInfo.TextColor = Color.Black
End If
etc.
Regarding the ComboBoxExt. We actually wrote such a wrapper ourselves in the meantime. It will be available with the 1.6 version. That should help you more easily replace the ComboBox.
Stefan
RP
Ramesh Praveen
Syncfusion Team
April 16, 2003 10:59 AM UTC
Hi,
Regarding the ComboBoxBarItem, is it the Text property that you want databound?
Regards,
Praveen Ramesh
UN
Unknown
Syncfusion Team
April 17, 2003 01:28 PM UTC
1. Yes I want to bind to the text property. What I'm doing at the moment is looping through the datatable adding to the items (ChoiceList I think its called).
2. I adopted the code in Stephen's answer, but it does not pick up all the lines for formatting. The underlying data is a dataview of 220 rows and 20 columns ..... (after .... I just realized that e.rowindex = 0 is the header row!!)
3. I looked at the LinkLabelCellModel example which I understand. However, I would like to override the OnDraw of a GridBoundColumn, so that the user defined formatting occurs within the cell rather than in the PrepareViewStyleInfo event - however I can see no way of doing this.
The idea is that I would create a number of derived cell types with built in preformatting, i.e. if cellvalue <0 the style.textcolor=Red etc.
Is this possible, or am I barking up the wrong tree??
Many thanks
Jeremy
p.s. very close to taking a decision to purchase the suite :)
AD
Administrator
Syncfusion Team
April 17, 2003 02:37 PM UTC
2) PrepareViewStyleInfo should be hit anytime a cell is drawn on the screen. So, any visible cell should be formatted as you specify in PrepareViewStyleInfo. Are you expecting cells that haven't been drawn (or are not currently visible) to be formatted? What do you mean by it does not pick up all the rows?
3) There is no drawing it the GridBoundColumn. The CellRenderer is responsible for drawing ths cell. So, you could derive a cell control (a CellModel and a CellRenderer), override the renderer's Draw method, and do your formatting there. Then you would make the GridBoundColumn.StyleInfo.CellType use your custom cell type.
A simpler option is to use 1.6 release'e QueryCellFormattedText event to format the text through an event. This is one of several new events exposed in that release.
UN
Unknown
Syncfusion Team
April 17, 2003 02:47 PM UTC
I realized later that I hadn't understood that e.rowindex = 0 refers to the header row - therefore it seemed that it wasn't picking up the data correctly, i.e.
Dim row As dsJFinancials.JournalRow = CType(CType(Me.GridDataBoundGrid1.DataSource, DataView).Item(e.RowIndex).Row, dsJFinancials.JournalRow)
was picking up the wrong row - it should be ...Item(e.RowIndex-1).Row
Anyway - not a problem any more.
I'm going off to purchase the suite now.
Many thanks for your amazing support here.
Regards
Jeremy
RP
Ramesh Praveen
Syncfusion Team
April 17, 2003 05:12 PM UTC
Jeremy,
1) Yes, there is no built-in data-binding support for the comboboxbaritem's choicelist. I will make this a feature request for a later release. The complexity is because comboboxbaritem is not a control derived class.
Regards,
Praveen