4

新しい DataRow オブジェクトを作成し、実行時に列を追加することはできますか?

// How can I specify column names for this data row object?
DataRow row = new DataRow();
4

2 に答える 2

8

いいえ。DataRow は、列を追加するために必要なアクセサーを持つ DataTable の子として設計されています。DataRows を直接操作できれば、列数/順序が異なる行を含む「ぎざぎざのテーブル」を作成できます。これは一般的に悪いことなので、行われていません。

DataRow に列を追加する場合は、Row を DataTable に追加し、その DataTable に列を追加してから、DataRow をもう一度見てください。

于 2012-04-11T14:37:58.147 に答える
3

列をデータ行に追加できるとは思いませんが、データテーブルには確かに追加できます。VB でこれを行うコードを次に示します。

Enum enumType
    StringType = 1
    BooleanType = 2
    DateTimeType = 3
    DecimalType = 4
    DoubleType = 5
    IntegerType = 6
    CharType = 7
End Enum

Private Shared ReadOnly Property ColumnDataType(ByVal ThisDataType As enumType) As String
    Get

        'DataType values supported are:
        'System.Byte, System.Char, System.DateTime, System.Decimal, System.Double, System.Int16, System.Int32, System.Int64, 
        'System.SByte, System.Single 

        Select Case ThisDataType
            Case enumType.BooleanType
                Return "System.Boolean"
            Case enumType.DateTimeType
                Return "System.DateTime"
            Case enumType.DecimalType
                Return "System.Decimal"
            Case enumType.DoubleType
                Return "System.Double"
            Case enumType.IntegerType
                Return "System.Int32"
            Case enumType.StringType
                Return "System.String"
            Case enumType.CharType
                Return "System.Char"
            Case Else
                cnst.ErrorDisplay("No such data type as " & ThisDataType.ToString)
                Return Nothing
        End Select

    End Get
End Property
Public Shared Sub AddColumn(ByRef dt As DataTable, ByVal ColumnName As String, ByVal ThisDataType As enumType)

    Dim dc As DataColumn = New DataColumn(ColumnName)
    dc.DataType = System.Type.GetType(ColumnDataType(ThisDataType))
    dt.Columns.Add(dc)

End Sub

コードは列挙を使用します。このページからいくつかのアイデアを得ました。アイデアは、AddColumn メソッドを呼び出して、好きな列をデータテーブルに追加できるということです。

于 2012-04-11T14:39:25.223 に答える