#vb.net #datatable
Вопрос:
У меня есть таблица данных с 5 строками и 2 столбцами(идентификатор,имя). Мне нужно передать 5 строк только с одним столбцом(идентификатором) объекта DataTable в параметр функции, который является объектом DataTable.
Это то, что я пытался
myfunction(dt.Rows.Item("Id") Public function myfunction (dt as dataTable) // Some code End Function
Но это не работает. Почему это так? Даже если столбец исключен, объект DataTable все равно остается объектом DataTable. Как я могу передать столбец «Идентификатор», не включая столбец «Имя» в эту функцию в качестве параметра.
Ответ №1:
Есть несколько проблем с тем, что вы предоставили.
Во-первых, в конце вызова вашей функции отсутствуют круглые скобки.
myfunction(dt.Rows.Item("Id"))
Во-вторых, ваша функция ожидает datatable, но вы передаете ячейку (а также не указываете, какую строку, так что это не сработает)…
Если вы действительно хотите, чтобы ваша функция использовала данные, вам нужно просто передать dt, например:
myFunction(dt)
Если вы хотите передать значение ячейки вместо этого, вы можете изменить определение функции, чтобы взять строку или любой другой тип данных, находящийся в этом столбце, и передать значение следующим образом:
myFunction(dt.Rows(ROWNUMBER).Item("Id"))
Комментарии:
1. Мне нужны все строки в таблице данных только с одним столбцом «Идентификатор».
2. Просто передайте всю таблицу данных, а затем в своей функции используйте только данные из нужного столбца, например
For Each row As DataRow In dt.Rows <do whatever you want with row("<columnname">)> Next
. Покажите нам, что вы собираетесь использовать с данными в своей функции.
Ответ №2:
Функции нуждаются в операторе a DataType
и a Return
.
Ваша функция ожидает a DataTable
, и вы передаете a DataRow
.
dt.Rows.Item
берет а Integer
, а не а String
.
Ты не Dim
Function
«а», как ты это называешь.
Переполнение стека запрашивает минимальный, полный и воспроизводимый пример вашей проблемы. Ваш код не такой.
Я дал вашей функции имя и что-то тривиальное, чтобы я мог продемонстрировать правильный синтаксис. Если вам не нужна вся таблица данных, не передавайте ее функции. Я просто передаю значения в столбце ID в виде списка(из T), Если ваша функция не находится под вашим контролем и ей требуется доступ к данным, просто передайте dt.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim lst = dt.Rows.OfType(Of DataRow)().Select(Function(dr) dr.Field(Of Integer)("ID")).ToList() Dim MaxID = GetMaxID(lst) End Sub Public Function GetMaxID(lst As List(Of Integer)) As Integer Dim MaxI = lst.Max Return MaxI End Function