StrataFrame Forum

View images + Text in ComboBox

http://forum.strataframe.net/Topic31844.aspx

By Mimouni Mohamed - 2/20/2013

Hello,

I try to put images + text in a ComboBox.

I tried with a ComboBox DrawItem but it does not work so I searched the internet and I found this code:

    Private Sub Ville_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.LIB_PAYS.DrawMode = DrawMode.OwnerDrawVariable
        Me.LIB_PAYS.DropDownStyle = ComboBoxStyle.DropDownList
    End Sub

    Private Sub LIB_PAYS_DrawItem(sender As Object, e As System.Windows.Forms.DrawItemEventArgs) Handles LIB_PAYS.DrawItem
        If e.Index <> -1 Then
            e.Graphics.DrawImage(Me.ImageList1.Images(e.Index), e.Bounds.Left, e.Bounds.Top)
            e.Graphics.DrawString(Me.LIB_PAYS.Items(e.Index).ToString, _
                                  Me.LIB_PAYS.Font, _
                                  System.Drawing.Brushes.Black, _
                                  New RectangleF(e.Bounds.X + 15, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
            e.DrawFocusRectangle()
        End If
    End Sub

I know that my ComboBox populated with BO



but it still not working so I turn to you to find out how?
is what my code or code that I found wrong?

Here is the result that shows me:

data:image/png;base64,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


cordially
Mimouni
By StrataFrame Team - 2/20/2013

Doing owner draw overrides all of the formatting logic for the combo box.  When you use the SF list population, we set the DataSource as a DataTable and set the DisplayMember and ValueMember.  The DisplayMember is basically ignored when you turn on owner draw, so you have to do it all manually.

You're really close, but you're problem is here:

 e.Graphics.DrawString(Me.LIB_PAYS.Items(e.Index).ToString, _
                                  Me.LIB_PAYS.Font, _
                                  System.Drawing.Brushes.Black, _
                                  New RectangleF(e.Bounds.X + 15, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))

The items collection is just returning a System.Data.DataRow, and it's ToString() method just returns "System.Data.DataRow".  You need to cast it as a data row, pull your field, then to string the field value:

 e.Graphics.DrawString(CType(Me.LIB_PAYS.Items(e.Index), DataRow)("FieldName").ToString, _
                                  Me.LIB_PAYS.Font, _
                                  System.Drawing.Brushes.Black, _
                                  New RectangleF(e.Bounds.X + 15, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))

Replace "FieldName" with what you need and you should be good to go.

By Mimouni Mohamed - 2/20/2013

Ben, thank you for the reply.

I applied your solution, I get an error : Unable to cast object of type 'System.Data.DataRowView' to type 'System.Data.DataRow'.
I changed DataRow and DataRowView by in this case he displays another message : LIB_PAYS is not a DataColumn DataRelation or for the table.

By StrataFrame Team - 2/21/2013

You're right, the IListSource.GetList() of the DataTable returns the DataView.  And if you're building the combo box off of the SF list population, we create the table with 2 or 3 values (depending upon whether you have a columns in your drop down):

display | dropdown | value

So, try this:

e.Graphics.DrawString(CType(Me.LIB_PAYS.Items(e.Index), DataRowView)("display").ToString, _
                                  Me.LIB_PAYS.Font, _
                                  System.Drawing.Brushes.Black, _
                                  New RectangleF(e.Bounds.X + 15, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
By Mimouni Mohamed - 2/21/2013

Think you very match ben