簡體   English   中英

如何使用datagridview創建自定義顯示

[英]How to create a custom display with datagridview

我是VB.net的新手,正在從事交付服務項目。 我當前正在使用連接到數據集,數據源,表適配器的標准數據網格視圖來顯示收到的待處理項目。 但是,我想知道是否有人可以幫助我像下面的第二張圖片一樣顯示相同的待處理項目:

在此處輸入圖片說明

使用VirtualMode和一個DataGridViewImageColumn CellValueNeeded繪制所需的圖像:

Public Class Form1
  'Add a DataGridView called DataGridView1 to the form
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    Dim dtb As New DataTable()
    dtb.Columns.Add("Col1", GetType(String))
    dtb.Columns.Add("Col2", GetType(Integer))
    dtb.Rows.Add("AA", 123)
    dtb.Rows.Add("CC", 234)
    DataGridView1.VirtualMode = True
    DataGridView1.AutoGenerateColumns = False
    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
    DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
    DataGridView1.Columns.Add(New DataGridViewImageColumn() With {.Name = "img"})
    DataGridView1.DataSource = dtb
  End Sub

  Private Sub DataGridView1_CellValueNeeded(sender As Object, e As DataGridViewCellValueEventArgs) Handles DataGridView1.CellValueNeeded
    If DataGridView1.Columns(e.ColumnIndex).Name = "img" AndAlso e.ColumnIndex >= 0 AndAlso e.ColumnIndex < DataGridView1.ColumnCount Then
      Select Case e.RowIndex
        Case 0 To DataGridView1.RowCount - 2
          Dim drw As DataRow = DirectCast(DataGridView1.Rows(e.RowIndex).DataBoundItem, DataRowView).Row
          Dim strCol1Value As String = CStr(drw("Col1"))
          Dim intCol2Value As Integer = CInt(drw("Col2"))
          Dim bmp As New Bitmap(100, 50)
          Using gfx As Graphics = Graphics.FromImage(bmp)
            Dim brs As Brush = New System.Drawing.Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(100, 50), Color.Black, Color.LightGray)
            gfx.FillRectangle(brs, New RectangleF(0, 0, bmp.Width, bmp.Height))
            gfx.DrawString(strCol1Value, New Font("Arial", 12), Brushes.Red, New PointF(0, 0))
            gfx.DrawString(intCol2Value.ToString, New Font("Arial", 12), Brushes.Yellow, New PointF(0, 25))
          End Using
          e.Value = bmp
        Case DataGridView1.RowCount - 1
          Dim bmp As New Bitmap(100, 50)
          Using gfx As Graphics = Graphics.FromImage(bmp)
            gfx.DrawString("NEW", New Font("Arial", 12), Brushes.Red, New PointF(0, 0))
          End Using
          e.Value = bmp
        Case Else
      End Select
    End If
  End Sub       
End Class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM