C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 130 を表示中)
■76820 / )  Re[2]: DataGridで任意の行の先頭表示について
□投稿者/ ちー (2回)-(2015/08/20(Thu) 16:38:25)
返答をありがとうございます。

環境については、聞いていたものを書いてしまいました。
すみません。

もう少し詳しく説明しますと、ハンディターミナルにて
バーコード入力を伴うシステム開発をしています。

ハンディターミナルのシステムは
WindowsR Embedded Version 7.00
でした。

FrameWorkはよくわかりませんが、
.NET Compact Framework v3.5
になるのでしょうか?(wiki調べ)

開発時では、ターゲットデバイスをWindowsCEにし、
エミュレータで動作確認をしています。


DataGridの背景色の変更は、Paint メソッドをオーバーライドしています。
背景色を変更する部分を抜き出してみました。

既存プログラムを変更しているので、理解は怪しいですが。。。
他に、列幅や右寄せ設定等しています。
このやり方が良くないのでしょうか?

-------------------------------------------------------------------
Public Class DataGridColumnStyles
    Inherits DataGridTextBoxColumn

    Protected BackColorColNm As String = ""

    '//************************************************************
    '//●BackColor プロパティ
    '//************************************************************
    Public Property BackColorColumnName() As String
        Get
            Return BackColorColNm
        End Get
        Set(ByVal value As String)
            BackColorColNm = value
        End Set
    End Property

    '//************************************************************
    '//●Paint オーバライド
    '//************************************************************
    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 _
    )
        '// 背景色変更
        Dim dtView As System.Data.DataRowView = CType(CType([source], CurrencyManager).List(rowNum), System.Data.DataRowView)
        Dim szArgb As String = dtView.Item(BackColorColNm)
        If szArgb <> "" Then
            backBrush = New SolidBrush(Color.FromArgb(CType(szArgb, Integer)))
        End If
        MyBase.Paint(g, bounds, [source], rowNum, backBrush, foreBrush, alignToRight)

    End Sub
End Class

Public Shared Sub SetAlimentRight( _
      ByRef dg As DataGrid _
    , ByRef dt As DataTable _
    , ByRef RightAlimentFlagList As ArrayList _
    , Optional ByVal BackColorColName As String = "" _
)
    If IsNothing(RightAlimentFlagList) Then Exit Sub

    Dim addTableStyle As New DataGridTableStyle

    For i As Integer = 0 To dt.Columns.Count - 1

        Dim addColumnStyles = New DataGridColumnStyles
        With addColumnStyles
            '// 背景色指定列名
            .BackColorColumnName = BackColorColName
        End With
        addTableStyle.GridColumnStyles.Add(addColumnStyles)

    Next
    dg.TableStyles.Clear()
    dg.TableStyles.Add(addTableStyle)
    dg.DataSource = dt '//dg表示

End Sub

Private Sub dg_SetDeleteRow(ByVal selRow As Integer)

    Dim dtGridData As DataTable = CType(dgList.DataSource, DataTable)
    If selRow = -1 Then

        '// ヘッダクリック
        If mbCheckAllSelect Then
            '// 全解除
            For i As Integer = 0 To dtGridData.Rows.Count - 1
                dtGridData.Rows(i).Item("BACKCOLOR") = ""
            Next
        Else
            '// 全選択
            For i As Integer = 0 To dtGridData.Rows.Count - 1
                dtGridData.Rows(i).Item("BACKCOLOR") = Color.Gray.ToArgb
            Next
        End If
        dgList.DataSource = dtGridData
        '// 全選択フラグ
        mbCheckAllSelect = Not mbCheckAllSelect

    Else
        '// データ行クリック
        If dtGridData.Rows(selRow).Item("BACKCOLOR") = "" Then
            dtGridData.Rows(selRow).Item("BACKCOLOR") = Color.Gray.ToArgb
        Else
            dtGridData.Rows(selRow).Item("BACKCOLOR") = ""
        End If
    End If

    Call DataGridAllColumnStyle.SetAlimentRight(dgList, dtGridData, New ArrayList(New Integer() {3}), "BACKCOLOR")
    Call SelectChangeRow(miRowNum)

    If selRow > 0 Then
        dgList.CurrentCell = New DataGridCell(selRow, 1)
    End If
End Sub

返信 編集キー/


管理者用

- Child Tree -