0

に格納されている値に文字 (%や など)を追加したいのですが、エラー メッセージが表示されます。ppDataTable

入力文字列の形式が正しくありません。実際の列に <97.0%> を格納できませんでした。期待される型は Decimal です。

DataTableに格納できる値のタイプを変更するにはどうすればよいですか?

Dim dv As New System.Data.DataView
Dim dt As New System.Data.DataTable
dv = SQL_Customer.Select(DataSourceSelectArguments.Empty)
dt = dv.ToTable()

dt.Rows(1)(1) = CStr(dt.Rows(1)(1)) & "%"
dt.Rows(1)(2) = CStr(dt.Rows(1)(2)) & "%"
dt.Rows(1)(3) = CStr(dt.Rows(1)(3)) & "%"
dt.Rows(1)(4) = CStr(dt.Rows(1)(4)) & "pp"
4

2 に答える 2

0

データ テーブルの列が入力された後は、データ テーブルの列の型を変更することはできません。

回避策の 1 つは、文字列型の新しい列を追加し、その列に必要な文字列値を入力してから、不要な型の列を削除することです。

于 2013-03-20T20:05:00.127 に答える
0

これが誰かを助けるなら、これは私が問題を解決した方法です:

    Dim dv As New System.Data.DataView
    Dim dt As New System.Data.DataTable
    Dim dt2 As New System.Data.DataTable
    Dim SelectedIndex As Object

    If datagrid.SelectedIndex = "-1" Then SelectedIndex = 0 Else SelectedIndex = GV_Cust.SelectedIndex

    'Populate Dataview with data in SQL Query for Customer KPIs
    dv = SQL_Customer.Select(DataSourceSelectArguments.Empty)
    'Populate table with data from dataview. Note that the data is formated as per data loaded. So if number is loaded, then format for the cell is number. This creates a problem when adding percentages
    dt = dv.ToTable()

    'New colums are added as string format in the dataTable so that % and pp can be added
    Dim column As DataColumn
    For i = 1 To 6
        ' Create second column. 
        column = New DataColumn()
        column.DataType = System.Type.GetType("System.String")
        column.ColumnName = i
        column.AutoIncrement = False
        column.Caption = i
        column.ReadOnly = False
        column.Unique = False
        ' Add the Column to the DataColumnCollection. 
        dt.Columns.Add(column)
    Next

    'New columns are populated and calculations for variances are calculated
    For j = 0 To 2
        For i = 0 To 4
            dt.Rows(i)(7 + j) = dt.Rows(i)(1 + j) & "%"
            dt.Rows(i)(10) = (dt.Rows(i)(1) - dt.Rows(i)(2)) & "pp"
            dt.Rows(i)(11) = (dt.Rows(i)(1) - dt.Rows(i)(3)) & "pp"
            dt.Rows(i)(12) = (dt.Rows(i)(2) - dt.Rows(i)(3)) & "pp"
        Next
        For i = 5 To 6
            dt.Rows(i)(7 + j) = dt.Rows(i)(1 + j)
            If dt.Rows(i)(2) = 0 Then dt.Rows(i)(10) = 0 & "%" Else dt.Rows(i)(10) = Math.Round((((dt.Rows(i)(1) / dt.Rows(i)(2))) - 1) * 100, 1) & "%"
            If dt.Rows(i)(3) = 0 Then dt.Rows(i)(11) = 0 & "%" Else dt.Rows(i)(11) = Math.Round((((dt.Rows(i)(1) / dt.Rows(i)(3))) - 1) * 100, 1) & "%"
            If dt.Rows(i)(3) = 0 Then dt.Rows(i)(12) = 0 & "%" Else dt.Rows(i)(12) = Math.Round((((dt.Rows(i)(2) / dt.Rows(i)(2))) - 1) * 100, 1) & "%"
        Next
    Next

    'Old columns are deleted and new wones are renamed
    dt.Columns.Remove("A")
    dt.Columns("1").ColumnName = "A"
    dt.Columns.Remove("B")
    dt.Columns("2").ColumnName = "B
    dt.Columns.Remove("C")
    dt.Columns("3").ColumnName = "C"
    dt.Columns.Remove("D")
    dt.Columns("4").ColumnName = "D"
    dt.Columns.Remove("D")
    dt.Columns("5").ColumnName = "E"
    dt.Columns.Remove("F")
    dt.Columns("6").ColumnName = "F"

    'Customer grid is populated, a selection button is added and the first row is selected
    datagrid.DataSource = dt
    datagrid.AutoGenerateSelectButton = True
    datagrid.DataBind()
    datagrid.SelectedIndex = SelectedIndex
于 2013-03-22T14:27:53.410 に答える