473,372 Members | 1,210 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,372 software developers and data experts.

Need help with Datagrid

I have downloaded some code and tried it and nothing happens with the
datagrid. Explain what is wrong and what I have to do please. I have tried
to Import the namespace Hamster and it didn't work. Explain what I have to
do to make that work.


Imports System
Imports System.Windows.Forms

Imports System.Drawing

Imports System.Data

Imports System.Collections

'Namespace Hamster.Common

'/ Implementation of a ComboBox as a column in a DataGrid

Public Class DataGridComboBoxColumn

Inherits DataGridColumnStyle

Private _xMargin As Integer = 2

Private _yMargin As Integer = 1

Private _comboBox As ComboBox

Private _oldValue As String = ""

Private _inEdit As Boolean = False

Private _dataTable As DataTable

Private _displayMember, _valueMember As String

'/ <param name="colName">The name of the column</param>

'/ <param name="dataSource">The datasource that contains the lookup

'/ <param name="displayMember">The member of the lookuptable to

'/ <param name="valueMember">The member of the lookuptable with the

'/ <param name="dataGrid">The datagrid parent of this column</param>

Public Sub New(ByVal colName As String, ByVal dataSource As DataTable, ByVal
displayMember As String, ByVal valueMember As String, ByVal dataGrid As

_comboBox = New ComboBox

_comboBox.Visible = False

_comboBox.DataSource = dataSource

_dataTable = dataSource

_comboBox.DisplayMember = displayMember

_displayMember = displayMember

_valueMember = valueMember

_comboBox.ValueMember = valueMember

_comboBox.DropDownStyle = ComboBoxStyle.DropDownList

Dim _graphicsContext As Graphics = dataGrid.CreateGraphics()

Dim _widest As Single = 0

Dim _stringSize As New SizeF(0, 0)

Dim dr As DataRow

For Each dr In dataSource.Rows

_stringSize = _graphicsContext.MeasureString(dr(displayMember).T oString(),

If _stringSize.Width _widest Then

_widest = _stringSize.Width

End If

Next dr

_comboBox.DropDownWidth = CInt(Math.Ceiling(_widest))

Me.Width = _comboBox.DropDownWidth + 25 ' Add the space for the dropdown

Me.MappingName = colName

Me.HeaderText = colName


End Sub 'New

'/ Standard override

'/ <param name="rowNum"></param>

Protected Overrides Sub Abort(ByVal rowNum As Integer)

_inEdit = False


End Sub 'Abort

'/ Standard override

'/ <param name="dataSource"></param>

'/ <param name="rowNum"></param>

Protected Overrides Function Commit(ByVal dataSource As CurrencyManager,
ByVal rowNum As Integer) As Boolean

If Not _inEdit Then

Return True

End If


Dim _value As Object = _comboBox.SelectedValue

If NullText.Equals(_value) Then

_value = System.Convert.DBNull

End If

Me.SetColumnValueAtRow(dataSource, rowNum, _value)



_inEdit = False


End Try

Return True

End Function 'Commit

'/ Standard override

'/ <param name="source"></param>

'/ <param name="rowNum"></param>

'/ <param name="bounds"></param>

'/ <param name="readOnly"></param>

'/ <param name="instantText"></param>

'/ <param name="cellIsVisible"></param>

Protected Overloads Overrides Sub Edit(ByVal [source] As CurrencyManager,
ByVal rowNum As Integer, ByVal bounds As Rectangle, ByVal [readOnly] As
Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)

_comboBox.Text = ""

Dim _originalBounds As Rectangle = bounds

_oldValue = _comboBox.Text

If Not cellIsVisible Then


End If

bounds.Offset(_xMargin, _yMargin)

bounds.Width -= _xMargin * 2

bounds.Height -= _yMargin

_comboBox.Bounds = bounds

_comboBox.Visible = True



_comboBox.SelectedValue = GetText(GetColumnValueAtRow([source], rowNum))

If Not (instantText Is Nothing) Then

_comboBox.SelectedValue = instantText

Dim [End] As Integer = _comboBox.Text.Length

_comboBox.Select([End], 0)



End If

'this.DataGridTableStyle.DataGrid.Invalidate(Origi nalBounds);


_inEdit = True

End Sub 'Edit

'/ Standard override

'/ <returns></returns>

Protected Overrides Function GetMinimumHeight() As Integer

Return _comboBox.PreferredHeight + _yMargin

End Function 'GetMinimumHeight

'/ Standard override

'/ <param name="g"></param>

'/ <param name="val"></param>

Protected Overrides Function GetPreferredHeight(ByVal g As Graphics, ByVal
val As Object) As Integer

Return FontHeight + _yMargin

End Function 'GetPreferredHeight

'/ Standard override

'/ <param name="g"></param>

'/ <param name="val"></param>

Protected Overrides Function GetPreferredSize(ByVal g As Graphics, ByVal val
As Object) As Size

Dim _extents As Size = Size.Ceiling(g.MeasureString(GetText(val),

_extents.Width += _xMargin * 2

_extents.Height += _yMargin

Return _extents

End Function 'GetPreferredSize

'/ Standard override

'/ <param name="g"></param>

'/ <param name="bounds"></param>

'/ <param name="source"></param>

'/ <param name="rowNum"></param>

Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal bounds As
Rectangle, ByVal [source] As CurrencyManager, ByVal rowNum As Integer)

Paint(g, bounds, [source], rowNum, False)

End Sub 'Paint

'/ Standard override

'/ <param name="g"></param>

'/ <param name="bounds"></param>

'/ <param name="source"></param>

'/ <param name="rowNum"></param>

'/ <param name="alignToRight"></param>

Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal bounds As
Rectangle, ByVal [source] As CurrencyManager, ByVal rowNum As Integer, ByVal
alignToRight As Boolean)

Dim _text As String = GetText(GetColumnValueAtRow([source], rowNum))

Dim dr As DataRow

For Each dr In _dataTable.Rows

If dr(_valueMember).ToString() = _text Then

_text = dr(_displayMember).ToString()

Exit For

End If

Next dr

PaintText(g, bounds, _text, alignToRight)

End Sub 'Paint

' Helper functions

Private Sub PaintText(ByVal g As Graphics, ByVal bounds As Rectangle, ByVal
[text] As String, ByVal alignToRight As Boolean)

Dim _backBrush = New SolidBrush(Me.DataGridTableStyle.BackColor)

Dim _foreBrush = New SolidBrush(Me.DataGridTableStyle.ForeColor)

Dim _rect As Rectangle = bounds

Dim _rectF As RectangleF = RectangleF.op_Implicit(_rect) 'Konverterar från
Rectangle till RectangleF

Dim _format As New StringFormat

If alignToRight Then

_format.FormatFlags = StringFormatFlags.DirectionRightToLeft

End If

Select Case Me.Alignment

Case HorizontalAlignment.Left

_format.Alignment = StringAlignment.Near

Case HorizontalAlignment.Right

_format.Alignment = StringAlignment.Far

Case HorizontalAlignment.Center

_format.Alignment = StringAlignment.Center

End Select

_format.FormatFlags = StringFormatFlags.NoWrap

g.FillRectangle(_backBrush, _rect)

_rect.Offset(0, _yMargin)

_rect.Height -= _yMargin

g.DrawString([text], Me.DataGridTableStyle.DataGrid.Font, _foreBrush,
_rectF, _format)


End Sub 'PaintText

Private Function GetText(ByVal val As Object) As String

If val Is System.DBNull.Value Then

Return Me.NullText

End If

If Not (val Is Nothing) Then

Return val.ToString()


Return String.Empty

End If

End Function 'GetText

End Class 'DataGridComboBoxColumn

'End Namespace 'Hamster.Common


'Imports Hamster.Common

Public Class Form1

Inherits System.Windows.Forms.Form

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles MyBase.Load

Dim ts As New DataGridTableStyle

ts.MappingName = "Columns"

Dim AccessDataTypes As New DataTable

AccessDataTypes.Columns.Add(New DataColumn("Number", GetType(Integer)))

AccessDataTypes.Columns.Add(New DataColumn("Name", GetType(String)))

AccessDataTypes.Rows.Add(New Object() {3, "Numeric"})

AccessDataTypes.Rows.Add(New Object() {130, "Text"})

Dim c1 As New DataGridComboBoxColumn("Type", AccessDataTypes, "Name",
"Number", theGrid)

c1.NullText = "3"


End Sub

End Class
Jul 4 '06 #1
0 1283

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

by: Junkguy | last post by:
I need some help programmatically causing a row in a DataGrid to "flush" its contents to its bound data (in Visual Studio 6 using Windows Forms with C#). My issue is I want to send an update to...
by: MrNobody | last post by:
I am desperately in need of some help to get a summary row for my DataGrid. A summary row is just a row always on the bottom which has totals for certain columns. I have been able to find...
by: ericm1155 | last post by:
I am trying to display some information from a database in a form that displays one record per line. When the user clicks anywhere on a line, that record is highlighted and selected, and my program...
by: Luis E Valencia | last post by:
I need a link on a datagrid, the link must have fields of the database Like this acciones.aspx?iddireccion=1&idindicador=4 Thanks
by: Jennyfer J Barco | last post by:
Hello again I have a datagrid and I'm showing many records. I need 2 things: I need that everytime they scroll down, the header stays lock so the user can see it all the time. I need to scroll...
by: Anna | last post by:
I have a simple DataGrid that displays a list of characteristics and allows you to edit a description for each characteristic. The query that feeds this involves a join, as the characteristics and...
by: Terry Olsen | last post by:
I've got a datagrid set up to display data. I've also got an Edit,Update,Cancel column set up to allow editing of data. I've got a DropDownList (ID="ddl3")in the EditItemTemplate for a certain...
by: coleenholley | last post by:
I've been trying since last Friday to get an answer on how to get a SPECIFIC row.cell value from a datagrid. I've had plenty of suggestions, but nothing works to get the value from a SPECIFIC Row...
by: Larry Woods | last post by:
I have a datagrid that is carrying all fields of a record...except one. Now I want to update the underlying database via a dataadapter. The update is working but the field that is "left out" is...
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.