简体   繁体   中英

wordwrap does not work on datagridtextboxcolumn in VB.net

I have looked at previous answers on this blog which dont seem to help me.

I have a datagrid and add columns that are datagridtextboxcolumn . When I click on a cell on datagrid - if the line is too big for the width of cell , it will display on the following line, but when I am not clicked on the cell, the end of the line of text will not be displayed on the next line - and is therefore not displayed.

I derived a new class from datagridtextboxcolumn and attempted to override the paint and painttext methods and this appeared to have no effect - the text is still displayed in the column and only 1 line is displayed.

My code is

Here is the derived class: -

( below I have overridden the paint and painttext class in order to see which method has some effect on the display in the datagrid - but there is no effect occuring through this process of overriding.

enter code here

Imports Microsoft.VisualBasic
Imports System.ComponentModel
Imports System.Data
Imports System.Data.Common
Imports System.Data.OleDb
Imports System.Drawing
Imports System.Windows.Forms
Namespace DataGridRichTextBox


Public Class DataGridRichTextBoxColumn
    Inherits DataGridTextBoxColumn

    Private _source As CurrencyManager
    Private _rowNum As Integer
    Private _isEditing As Boolean



    Public Sub New()
        _source = Nothing
        _isEditing = False
    End Sub 'New



    Protected Overloads Sub PaintText(ByRef g As Graphics, ByVal bounds As System.Drawing.Rectangle, ByRef Text As String, ByVal alligntoright As Boolean)

    End Sub

    Protected Overloads Sub PaintText(ByRef g As Graphics, ByVal bounds As System.Drawing.Rectangle, ByRef Text As String, ByRef s1 As System.Drawing.Brush, ByRef s2 As System.Drawing.Brush, ByVal alligntoright As Boolean)
    End Sub

    Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal _source As CurrencyManager, ByVal num As Integer)
    End Sub

    Protected Overloads Overrides Sub SetColumnValueatrow(ByVal _source As CurrencyManager, ByVal num As Integer, ByVal obj As Object)
    End Sub

End Class 'DataGridComboBoxColumn

End Namespace

'Here is where I add the derived class as an object to the datagrid : -

Imports System.Windows.Forms
Imports System.Data.SqlClient
Imports System.Drawing




Public Class DataGridMine
    Inherits DataGrid



Public r_counter, column_num, x1 As Integer

Public x13 As Integer

#Region " Windows Form Designer generated code "


Public Sub New()
    MyBase.New()

    'This call is required by the Windows Form Designer.
    InitializeComponent()

 End Sub
'Form overrides dispose to clean up the component list.
 Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
        If Not (components Is Nothing) Then
            components.Dispose()
        End If
    End If
    MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
Friend WithEvents SqlSelectCommand2 As New SqlCommand
Friend WithEvents DataSet51 As New tasks_trial2.DataSet5
Public WithEvents DataGridTableStyle1 As New DataGridTableStyle



Public WithEvents task_name_col, parent_col As New DataGridTextBoxColumn


Public WithEvents description_col As New DataGridRichTextBox.DataGridRichTextBoxColumn



Friend WithEvents SqlDataAdapter3 As New SqlDataAdapter

Friend WithEvents SqlDataAdapter2 As New SqlDataAdapter
Friend WithEvents SqlSelectCommand3 As New SqlCommand




   <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
    CType(Priority_code_table1, System.ComponentModel.ISupportInitialize).BeginInit()



    SuspendLayout()



    Me.DataMember = "tasks"
    Me.DataSource = DataSet51
    Me.Location = New Point(8, 230)
    Me.Size = New Size(1117, 384)
    Me.TabIndex = 0


    Me.TableStyles.AddRange(New DataGridTableStyle() {DataGridTableStyle1})





    SqlDataAdapter2.SelectCommand = SqlSelectCommand2
    SqlDataAdapter2.TableMappings.AddRange(New System.Data.Common.DataTableMapping() {New System.Data.Common.DataTableMapping("Table", "tasks")})

    SqlSelectCommand2.CommandText = ""
    SqlSelectCommand2.Connection = SqlConnection10


    DataGridTableStyle1.DataGrid = Me



    DataGridTableStyle1.AllowSorting = False

    column_num = 3

    DataGridTableStyle1.HeaderForeColor = SystemColors.ControlText
    DataGridTableStyle1.MappingName = "tasks"
    DataGridTableStyle1.SelectionBackColor = Color.Aquamarine
    DataGridTableStyle1.SelectionForeColor = Color.Black
    DataGridTableStyle1.PreferredRowHeight = 10
    DataGridTableStyle1.PreferredColumnWidth = 75



    description_col.HeaderText = "Description"
    description_col.MappingName = "description"
    description_col.Width = 260

'.....................

 ' where column is description_col.


  Public Sub add_columns(ByRef dgrid1 As DataGridMine, ByVal column As Object)

        dgrid1.DataGridTableStyle1.GridColumnStyles.AddRange(New DataGridColumnStyle() {column})

    End Sub

you don't have to do all that if you use a DataGridViewTextBoxColumn

just have to set some option via code or properties menu

go to your Columns listing and select the Column you want the text to be wrapped up and not cutt off.

go to DefaulCellStyle and set

WrapMode = True

additionally you could set this on the DGV Property Menu

AutoSizeColumnsMode to Fill

and

AutoSizeRowsMode to AllCells

that should do the Trick

this is all set in Properties Menu but you can do this in Code too so your choice

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM