VB.NET создать данные? - PullRequest
0 голосов
/ 12 июля 2011

Я пытаюсь создать таблицу данных в VB.NET, но при выводе строки из этой таблицы отображается «System.Data.DataRow».

Я сравнил свой код с несколькими веб-сайтами, и он кажется правильным. Однако, если я вместо этого отвечаю. Запишите эти значения, они отображаются правильно.

Так вот мой код:

        Sub Page_Load(Sender as Object, E as EventArgs)
            If Not IsPostback Then 
...
            End If

            Main
        End Sub

        Sub Main()
            Dim FirstMonthDate As Date = CDate("1/1/" & dYear.SelectedValue)
            Dim LastMonthDate As Date = GlobalFunctions.GlobalF.MonthLastDate(dYear.SelectedValue & "-" & dEndMonth.SelectedValue & "-1")
            Dim TheGroup As String
            Dim LastWeek As String
            Dim FirstWeek As String
            Dim dLastWeek As Date
            Dim dFirstWeek As Date
            Dim iWeek As String

            Dim commandstring As String = "SELECT cast(DateDiff(wk, '1/1/2011', '" & LastMonthDate & "') as varchar(30)) AS SELECTED_WEEK "
            Dim DSDateData As New System.Data.DataSet
            DSDateData = GlobalFunctions.GlobalF.GetDevSQLServerDataSet(commandstring)
            Dim dRow As DataRow

            For Each dRow In DSDateData.Tables(0).Rows
                iWeek = dRow("SELECTED_WEEK")
            Next

            Dim FirstYearDate As Date = CDate("1/1/" & dYear.SelectedValue)

            commandstring = "SELECT DateAdd(ww, " & iWeek & ", '" & FirstYearDate & "')  AS LAST_WEEK "
            Dim DSDateData2 As New System.Data.DataSet
            DSDateData2 = GlobalFunctions.GlobalF.GetDevSQLServerDataSet(commandstring)

            For Each dRow In DSDateData2.Tables(0).Rows
                LastWeek = dRow("LAST_WEEK")
            Next

            dLastWeek = CDate(LastWeek)

            commandstring = "SELECT DATEADD(dd, -1, DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,'" & LastMonthDate & "'),'" & LastMonthDate & "') ), 0)) AS FIRST_WEEK "
            Dim DSDateData3 As New System.Data.DataSet
            DSDateData3 = GlobalFunctions.GlobalF.GetDevSQLServerDataSet(commandstring)

            For Each dRow In DSDateData3.Tables(0).Rows
                FirstWeek = dRow("FIRST_WEEK")
            Next

            dFirstWeek = CDate(FirstWeek)
            dFirstWeek = DateAdd(DateInterval.WeekOfYear, -1, dFirstWeek)

            Dim arrDayYear As New ArrayList()
            Dim dFirstDay As New Date

            Dim arrList As ArrayList = New ArrayList()

            Dim dt2 As New DataTable
            Dim sWeek As DataColumn = New DataColumn("sWeek")
            sWeek.DataType = System.Type.GetType("System.String")
            Dim sDay As DataColumn = New DataColumn("sDay")
            sDay.DataType = System.Type.GetType("System.String")
            dt2.Columns.Add(sWeek)
            dt2.Columns.Add(sDay)

Response.Write("NW1")

            Dim dr As DataRow
            dr = dt2.NewRow()
            dr("sWeek") = "New week"
            dr("sDay") = "New day"
            dt2.Rows.Add(dr)

            Response.Write(dr)
            Response.Write("<br>")

            dFirstDay = dFirstDay.AddDays(1)
...
End Sub
...

Именно этот последний Response.Write вызывает «System.Data.DataRow». Но Response.Write до этого (NW1) печатается. Так что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 12 июля 2011

Ваш код правильный.

Звонит Response.Write(dr) печатает dr.ToString().
Поскольку DataRow не переопределяет ToString(), он возвращает имя типа.

Возможно, вы хотите напечатать значение столбца.

1 голос
/ 12 июля 2011

Вы должны перебрать строки данных или выбрать конкретную строку данных. Итерация и вывод значений будут выглядеть так:

//c#
     foreach (DataRow row in dt.Rows) 
     {
        foreach (DataColumn col in dt.Columns)
           Console.WriteLine(row[col]);
     }  

//VB.Net
     For Each (row As DataRow In dt.Rows) 

        For Each (col As DataColumn In dt.Columns)
           Console.WriteLine(row[col])
        Next
     Next

Для печати только первой строки:

DataRow row = dt.Rows[0];

foreach (DataColumn col in row.Columns)
   Console.WriteLine(row[col]);
0 голосов
/ 12 июля 2011

Response.Write () Нужна строка, поэтому она преобразует вашу переменную (dr) в строку. Метод "toString" по умолчанию просто использует имя класса. В этом случае "System.Data.DataRow"

Похоже, что вы, возможно, захотите перебрать строку и вывести каждое значение отдельно что-то вроде ...

For Each element In dr.ItemArray
  Response.Write(element)
Next
Response.Write("<br>")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...