У меня есть DataTable, который построен так:Добавить столбец в DataTable перед экспортом в Excel файл
Dim dt As New DataTable()
dt = SqlHelper.ExecuteDataset(connString, "storedProcedure", Session("Member"), DBNull.Value, DBNull.Value).Tables(0)
Затем он преобразуется в DataView и экспортируются в Excel, как это:
Dim dv As New DataView()
dv = dt.DefaultView
Export.CreateExcelFile(dv, strFileName)
Я хочу добавить еще один столбец и заполнить его данными до экспорта в Excel. Вот что я делаю сейчас, чтобы добавить столбец:
Dim dc As New DataColumn("New Column", Type.GetType("System.String"))
dc.DefaultValue = "N"
dt.Columns.Add(dc)
Затем заселить его:
For Each row As DataRow In dt.Rows
Dim uID As Integer = Convert.ToInt32(dt.Columns(0).ColumnName)
Dim pID As String = dt.Columns(0).ColumnName
Dim qry As String = "SELECT * FROM [MyTable] WHERE [UserID] = " & uID & " AND [PassID] = '" & pID & "'"
Dim myCommand As SqlCommand
Dim myConn As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("connString"))
myConn.Open()
myCommand = New SqlCommand(qry, myConn)
Dim reader As SqlDataReader = myCommand.ExecuteReader()
If reader.Read() Then
row.Item("New Column") = "Y"
Else
row.Item("New Column") = "N"
End If
Next row
Но я получаю «System.FormatException: Входная строка была не в правильном формате.» при запуске приложения. Это не похоже, как эти строки:
Dim uID As Integer = Convert.ToInt32(dt.Columns(0).ColumnName)
Dim pID As String = dt.Columns(0).ColumnName
Я думаю, у меня есть более чем один вопрос здесь, потому что даже если я закомментируйте цикл, который заполняет данные в столбце я создал не появляется в файл Excel. Любая помощь приветствуется. Благодаря!
EDIT:
Хорошо, я хватал имя столбца вместо фактических данных в столбце ... потому что я идиот. Новый столбец по-прежнему не отображается в экспортированном файле Excel. Вот обновленный код:
Dim dt As New DataTable()
dt = SqlHelper.ExecuteDataset(connString, "storedProcedure", Session("Member"), DBNull.Value, DBNull.Value).Tables(0)
Dim dc As New DataColumn("New Column", Type.GetType("System.String"))
dc.DefaultValue = "N"
dt.Columns.Add(dc)
'set the values of the new column based on info pulled from db
Dim myCommand As SqlCommand
Dim myConn As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("connString"))
Dim reader As SqlDataReader
For Each row As DataRow In dt.Rows
Dim uID As Integer = Convert.ToInt32(row.Item(0))
Dim pID As String = row.Item(2).ToString
Dim qry As String = "SELECT * FROM [MyTable] WHERE [UserID] = " & uID & " AND [PassID] = '" & pID & "'"
myConn.Open()
myCommand = New SqlCommand(qry, myConn)
reader = myCommand.ExecuteReader()
If reader.Read() Then
row.Item("New Column") = "Y"
Else
row.Item("New Column") = "N"
End If
myConn.Close()
Next row
dt.AcceptChanges()
Dim dv As New DataView()
dv = dt.DefaultView
Export.CreateExcelFile(dv, strFileName)
Is ColumnName a int? Вы пытаетесь преобразовать его в один ... – Jeremy
, если 'dt.Columns (0) .ColumnName' - это все цифры (например,' '12" '),' Convert.ToInt32' потерпит неудачу – Plutonix
Ну, я допинг ... Мне нужно было захватить значение из этого столбца, а не имя столбца. Я обновил свой оригинальный пост. – TheIronCheek