473,739 Members | 6,186 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

DataGrid Columns

I am using the DataGrid in a Windows Application, how can
I adjust the widths of each column individually.
Nov 19 '05 #1
2 6411

You have to add a tablestyle to your grid. When filling for your
dataset specify a tablename that will be your mappingname. ie
DataAdapter.Fil l(dataset, "MappingNam e")
Private Sub SetupGrid()

Dim ts As New DataGridTableSt yle

ts.MappingName = "InvoiceDat a"

Dim colDescription As New DataGridTextBox Column

With colDescription

..MappingName = "Descriptio n"

..HeaderText = "Descriptio n"

..Width = 280

..NullText = ""

End With

Dim colQty As New DataGridTextBox Column

With colQty

..MappingName = "Quantity"

..HeaderText = "Qty"

..Width = 50

End With

Dim cm As CurrencyManager = CType(Me.Bindin gContext(dvClie nt),
CurrencyManager )

Dim pd As System.Componen tModel.Property Descriptor =
cm.GetItemPrope rties()("Each")

Dim colEach As New DataGridTextBox Column(pd, "C")

With colEach

..MappingName = "Each"

..HeaderText = "Each"

..Width = 50

End With

Dim colPrice As New DataGridTextBox Column(pd, "C")

With colPrice

..MappingName = "Price"

..HeaderText = "Price"

..Width = 50

End With

ts.GridColumnSt yles.Add(colDes cription)

ts.GridColumnSt yles.Add(colQty )

ts.GridColumnSt yles.Add(colEac h)

ts.GridColumnSt yles.Add(colPri ce)

dgInvoiceData.T ableStyles.Add( ts)

ts = Nothing

colPrice = Nothing

colEach = Nothing

colQty = Nothing

colDescription = Nothing

End Sub



"CSL" <co*****@kga.co .za> wrote in message
news:0c******** *************** *****@phx.gbl.. .
I am using the DataGrid in a Windows Application, how can
I adjust the widths of each column individually.

Nov 19 '05 #2

Lot here to try and work on thank you I will let you know how it goes......
"Joe Fallon" <jf******@nospa mtwcny.rr.com> wrote in message
news:Or******** ******@TK2MSFTN GP11.phx.gbl...
Here is a class you can use to inherit a standard DataGrid and then use some new properties and methods.

Option Explicit On
Option Strict On

Imports System.Drawing
Imports System.Windows. Forms

Namespace abc.xyz
Public Class MyDataGrid
Inherits DataGrid

#Region "Public Properties"
Public ReadOnly Property VerticalScrollB arVisible() As Boolean
'The VertScrollBar property of a DataGrid is Protected. The only way to access it is thru a derived class!
Return Me.VertScrollBa r.Visible
End Get
End Property
#End Region

#Region "Public Methods"
Public Sub WidenRightColum n(ByRef DataGrid As MyDataGrid, ByVal dt As
DataTable, ByVal TableStyle As String)
'computes the width of the running grid and only widens the right
column if it is less than the width.
Dim numCols As Integer
numCols = dt.Columns.Coun t

Dim scrollBarWidth As Integer
If DataGrid.Vertic alScrollBarVisi ble = True Then
scrollBarWidth = SystemInformati on.VerticalScro llBarWidth
scrollBarWidth = 0
End If

'the fudge -4 is for the grid borders
Dim targetWidth As Integer
targetWidth = DataGrid.Client Size.Width - scrollBarWidth - 4

Dim runningWidthUse d As Integer
runningWidthUse d = DataGrid.TableS tyles(TableStyl e).RowHeaderWid th
Dim i As Integer
i = 0

Do While (i < (numCols - 1)) And (runningWidthUs ed < targetWidth)
runningWidthUse d +=
DataGrid.TableS tyles(TableStyl e).GridColumnSt yles(i).Width
i += 1

If (runningWidthUs ed < targetWidth) Then
DataGrid.TableS tyles(TableStyl e).GridColumnSt yles((numCols -
1)).Width = (targetWidth - runningWidthUse d)
End If

End Sub

'Comments on Method: AutoFitColumns
' DataGrid=DataGr id that is to be formatted.
' DataTable = DataGrid.DataSo urce.DataSet.Ta bles(0)
' NumberOfRowsToS can=Number of data records to be scanned in order to
compute the columns widths (Recommend 20).
' MaxPixelWidth=M aximum allowable pixel width of a COLUMN. (JF - Use a large number like 300.)

'The MaxPixelWidth parameter specifies the MAXIMUM value of the width
component of the returned SizeF structure
'(SizeF.Width). If the width parameter is less than the actual width of the string, the returned SizeF.Width
'component is truncated to a value representing the maximum number of
characters that will fit within the specified width.

'Takes a DataGrid that should be already assigned a populated dataset,
'and formats the DataGrid so that the column widths reflect the widths
of the data.
'This is accomplished by dynamically creating a single
DataGridTableSt yle and multiple DataGridTextBox Column(s).
'For each data column, the width of the column is set to the highest
data width within the column.
'In order to reduce computation time where large datasets exist,
'a parameter exists to define how many rows are scanned.
'I would suggest that only the first 20 rows are scanned.

Public Sub AutoFitColumns( ByRef DataGrid As MyDataGrid, ByVal dt As
DataTable, ByVal TableStyle As DataGridTableSt yle, _
ByVal NumberOfRowsToS can As Integer, ByVal
MaxColumnWidth As Integer)
Dim HideColumns() As String = {""}
AutoFitColumns( DataGrid, dt, TableStyle, NumberOfRowsToS can,
MaxColumnWidth, HideColumns)
End Sub

Public Sub AutoFitColumns( ByRef DataGrid As MyDataGrid, ByVal dt As
DataTable, ByVal TableStyle As DataGridTableSt yle, _
ByVal NumberOfRowsToS can As Integer, ByVal
MaxColumnWidth As Integer, ByVal HideColumns() As String)
'Create graphics object for measuring widths.
Dim Graphics As Graphics = DataGrid.Create Graphics()
'Can only scan rows if they exist.
NumberOfRowsToS can = System.Math.Min (NumberOfRowsTo Scan,

'Now loop through the columns and set the widths.
Dim Column As DataColumn
Dim ColumnStyle As DataGridColumnS tyle
Dim Width As Integer
For Each Column In dt.Columns
ColumnStyle = TableStyle.Grid ColumnStyles(Co lumn.ColumnName )

If Not ColumnStyle Is Nothing Then
If HideColumns.Ind exOf(HideColumn s, Column.ColumnNa me) >= 0 Then 'hide all columns in the HideColumns array
ColumnStyle.Wid th = 0
'Set width to header text width.
Width = CInt(Graphics.M easureString(Co lumnStyle.Heade rText,
DataGrid.Font, MaxColumnWidth) .Width)
'Change width, if data width is wider than header text width. 'Check the width of the data in the first X rows.
Dim iRow As Integer
Dim dr As DataRow
For iRow = 0 To NumberOfRowsToS can - 1
dr = dt.Rows(iRow)
If Not IsDBNull(dr(Col umn.ColumnName) ) Then
Width = CInt(System.Mat h.Max(Width,
Graphics.Measur eString(CStr(dr (Column.ColumnN ame)), DataGrid.Font,
MaxColumnWidth) .Width))
End If
'ColumnStyle.Wi dth = Width + 4
'increase width from 4 to 20 to allow for the Sort arrow when a column header is clicked on.
ColumnStyle.Wid th = Width + 20
End If
End If
Graphics.Dispos e()
End Try
End Sub

Public Sub MakeColumnsRead Only(ByRef DataGrid As MyDataGrid, ByVal
TableName As String, ByVal ReadOnlyColumns () As String)
Dim ColName As String
For Each ColName In ReadOnlyColumns
DataGrid.TableS tyles(TableName ).GridColumnSty les(ColName).Re adOnly = True
Next ColName
End Sub

#End Region

End Class
End Namespace
=============== =============== =============== =
Sample code to use the class in a Windows Form with a MyDataGrid on it:

'define a list of columns to make ReadOnly
Dim ReadOnlyColumns () As String = {"field1", "field2"}

'define a list of columns to Hide
Dim HideColumns() As String = {"field3", "field4"}

tableStyle.Mapp ingName = strTableName
tableStyle.Alte rnatingBackColo r = Bisque

'see below for another class to change the color of READ ONLY fields.
Dim MyColoredColumn As DataGridColored TextBoxColumn
Dim i As Integer
Do While i < dsMain.Tables(s trTableName).Co lumns.Count
MyColoredColumn = New DataGridColored TextBoxColumn
MyColoredColumn .HeaderText =
ds.Tables(strTa bleName).Column s(i).ColumnName
MyColoredColumn .MappingName =
ds.Tables(strTa bleName).Column s(i).ColumnName
tableStyle.Grid ColumnStyles.Ad d(MyColoredColu mn)
End If
i += 1

With DataGrid1
.TableStyles.Cl ear()
.TableStyles.Ad d(tableStyle)
.DataSource = ds
.DataMember = "dtName"
.AllowNavigatio n = False
.MakeColumnsRea dOnly(DataGrid1 , strTableName, ReadOnlyColumns )
.AutoFitColumns (DataGrid1, ds.Tables(strTa bleName), tableStyle, 20, 300, HideColumns)
.WidenRightColu mn(DataGrid1, ds.Tables(strTa bleName), strTableName) End With
=============== =============== ============
To make the read only columns a different color you need another class:

Option Explicit On
Option Strict On

Imports System.Drawing
Imports System.Drawing. Drawing2D
Imports System.Windows. Forms

Namespace xyz.abc
Public Class DataGridColored TextBoxColumn
Inherits DataGridTextBox Column

#Region "Constructo r"
Public Sub New()
'do nothing
End Sub
#End Region

#Region "Public Methods"
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal
bounds As Rectangle, ByVal source As CurrencyManager , ByVal rowNum As
Integer, ByVal backBrush As Brush, ByVal foreBrush As Brush, ByVal
alignToRight As Boolean)
' the idea is to conditionally set the foreBrush and/or backbrush
depending upon some criteria on the cell value
' Here, we color any cell that is Read Only.
If Me.ReadOnly = True Then
'could be as simple as
'backBrush = New SolidBrush(Colo r.Aqua)
'or something fancier
backBrush = New LinearGradientB rush(bounds, Color.FromArgb( 255,
200, 200), Color.FromArgb( 128, 20, 20), LinearGradientM ode.BackwardDia gonal) foreBrush = New SolidBrush(Colo r.White)
End If
'make sure the base class gets called to do the drawing with the
possibly changed brushes
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush,
End Try
End Sub
#End Region

End Class

End Namespace
Joe Fallon

"CSL" <co*****@kga.co .za> wrote in message
news:0c******** *************** *****@phx.gbl.. .
I am using the DataGrid in a Windows Application, how can
I adjust the widths of each column individually.

Nov 20 '05 #3

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

Similar topics

by: Reb | last post by:
I am using a datagrid within another datagrid. My second datagrid is expand/collapse one. I am facing some error. This is my code. ExpandGrid.aspx <form id="Form1" method="post" runat="server"> <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px"
by: Josef Meile | last post by:
Hi, I'm using a ComboBox, some Textboxes, and a DataGrid to represent a many-to-many relationship between Person and Course. Each time that I change the value in the ComboBox (which for now is the OID of Person), the information of the person matching the selected OID is shown in the Textboxes (Name, Address, id, etc) and the courses this person is taken are shown in a DataGrid (course name, price, etc.). This is working well so far, I...
by: Amber | last post by:
The DataGrid allows you to make columns visible or invisible on demand - even edit and other special columns. This article will show you how it is done. Some developers have reported problems controlling the visibility of columns in the DataGrid control. The problem usually comes down to one fact. The DataGrid has a property called AutoGenerateColumns. The default value is "True". This means that when AutoGenerateColumns is set to True,...
by: Jim Heavey | last post by:
Trying to figure out the technique which should be used to add rows to a datagrid. I am thinking that I would want an "Add" button on the footer, but I am not quite sure how to do that. Is that the best method? Do you have a sample of how to do this?
by: tshad | last post by:
I am having trouble with links in my DataGrid. I have Links all over my page set to smaller and they are consistant all over the page in both Mozilla and IE, except for the DataGrid. Here is a snippet from my .css file: *************************** body { margin:0; padding:0;
by: CanoeGuy | last post by:
I have been trying for the last two weeks to display a dynamic DataGrid. The data that I'm pulling from a SQL Server DB will have whole columns that will be either NULL or 0. I want to display only the fields that have actual data in them and either not display or hide the columns that have NULL or 0 values. As an example, one page may need to display a total of 5 columns and another page may need to display three columns based on the...
by: jimb | last post by:
I can get the dropdownlist into the datagrid, and I can populate it, but I can't read it. Anybody have a working example of a dropdownlist in an editable grid? Thanks. -- .. http://sf-f.org, weblog and search engine for fans and writers of
by: Arpan | last post by:
Assume that a database table has the following 4 columns - ID, UserID, Subject & Marks. I am retrieving the records existing in this DB table & displaying them in a DataGrid like this: <script runat="server"> Sub Page_Load(obj As Object, ea As EventArgs) Dim dSet As DataSet Dim sqlConn As SqlConnection Dim sqlDapter As SqlDataAdapter
by: rn5a | last post by:
A SqlDataReader is populated with the records from a SQL Server 2005 DB table. The records retrieved depends upon 2 conditions (the conditions depend on what a user selects in an ASPX page). If condition1 is true, then the SqlDataReader will be populated with the records existing in table1 & will return 0 to the calling function but if condition2 is true, then the SqlDataReader will be populated with the records from another table named...
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.