Я хочу сделать несколько выборок с данными, но это еще не работает. Пожалуйста, направляйте.
Для 2 переменных, CodeProduct и Barcode, мне удалось, но добавить 2 переменные, ColorCode и Size, я все еще не могу
Public dt As New DataTable()
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
'dt = New DataTable
dt.Columns.AddRange({
New DataColumn("No", GetType(Integer)),
New DataColumn("CodeProduct", GetType(String)),
New DataColumn("Barcode", GetType(String)),
New DataColumn("ColorCode", GetType(String)),
New DataColumn("Size", GetType(String)),
New DataColumn("Qty", GetType(Integer))
})
Grid.DataSource = dt
End Sub
Private Sub process()
Dim Barcode = TextBox1.Text.Trim()
Dim CodeProduct = TextBox2.Text.Trim()
Dim ColorCode = "test"
Dim Size = "test"
Dim row As DataRow = Nothing
If dt.Rows.Cast(Of DataRow).Any() Then
'row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault())
row = dt.Select($"Barcode = '{Barcode}'" And $"Codeproduct = '{CodeProduct }'").FirstOrDefault()
End If
End Sub
@jmcilhinney, спасибо за ваш ответ. Из вашего комментария я не нашел ссылку на документацию, которую вы имели в виду.
Я не уверен на 100%, что ваш код вообще пытается сделать. Полагаю, в том же духе, что и в других комментариях, что-то вроде dt.Select($"Barcode = '{Barcode}' AND "Codeproduct = '{CodeProduct }' AND .....").FirstOrDefault() — это то, о чем вы просите?
Просто нет оправдания тому, что вы не нашли документацию. Все, что вам нужно сделать, это щелкнуть имя метода в окне кода VS и нажать F1, чтобы перейти непосредственно к документации для этого метода. Контекстно-зависимая справка использовалась в VS десятилетиями, а в Windows — еще дольше. Вы также можете получить доступ к документации в целом через меню «Справка» в VS. У каждого должна быть закладка/избранное в браузере на странице поиска. Вот австралийский из моего браузера.
@Hursey, спасибо за ваш ответ. поэтому я хочу сопоставить текстовое поле с datagridview через datatable и столбец qty, если то же самое, то просто добавьте значение в столбец «Qty». row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault()). Я попробовал 2 столбца из вашего предыдущего рекомендательного кода, подобного этому, без ошибок, затем попробовал код от вас.
@Хурси, и сделай вот так row = dt.Select($"Barcode = '{Barcode}'" And $"Codeproduct = '{CodeProduct }'").FirstOrDefault() но вот такая ошибка Conversion from string "Barcode = '1000'" to type 'Long' is not valid.
@Hursey, row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault()) если я использую этот код, то ошибки не будет, но я хочу добавить еще 2 столбца, которые будут доступны для данных в этом коде.
@jmcilhinney, спасибо за ваше руководство.
@jmcilhinney, The Select documentation provides a link to the Expression documentation and that provides this example: (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John' из моего кода row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault()) в row = dt.Select($"Barcode = '{Barcode}'" And $"Codeproduct = '{CodeProduct }'").FirstOrDefault() Пожалуйста, руководство от вас
Пожалуйста, не засоряйте комментарии кодом, обновите свой вопрос дополнительными деталями. Это только усложняет чтение. Также не уверен на 100%, в чем вопрос сейчас, похоже, в вашем последнем комментарии вы почти получили ответ. Условия соединения с использованием логических операторов в одном выборе (кстати, у вас есть дополнительный «$» там)
Вам не нужно спрашивать нас, должны ли вы использовать определенный код или нет. Вы должны попробовать этот код для себя, и тогда вы знаете. Если это сработает, вы можете опубликовать свой собственный ответ на вопрос. Если это не сработает, вы можете обновить вопрос и показать нам, что вы пробовали, и рассказать нам, что произошло, когда вы это попробовали. Как и было предложено, НЕ размещайте толстые куски кода в комментариях. Это слишком сложно читать, и в любом случае никому не нужно читать комментарии, чтобы понять вопрос. Если параметры вашего вопроса изменились, измените вопрос, чтобы включить ВСЮ соответствующую информацию.
Если вы получаете преобразование из строки «Штрих-код = '1000'» в тип «Длинный», это недопустимые ошибки. Честно говоря, если вы прочитали ошибку, она говорит вам ответ. Штрих-код имеет целочисленный тип, и вы сравниваете его со строкой. Мы не знаем ваших типов данных, поэтому должны исходить из кода, который вы публикуете. Либо преобразуйте «1000» в целое число, либо преобразуйте штрих-код в строку, это легко исправить.
@Hursey, row = If(dt.Select($"Barcode = '{Barcode}'").FirstOrDefault(), dt.Select($"Codeproduct = '{CodeProduct }'").FirstOrDefault()) Если я использую этот код, тогда нет ошибки и «штрих-кода», что означает строку типа данных. Conversion from string "Barcode = 'TEST'" to type 'Long' is not valid. Пробовал со строками тоже самое
@Hursey, If you are getting Conversion from string "Barcode = '1000'" to type 'Long' is not valid errors. Honestly, if you had read the error it's telling you the answer. Barcode is and integer type and you are comparing it to a String. Так что есть разница между вашим рекомендательным кодом и моим собственным кодом.
@Hursey, Please don't flood comments with code, update your question with extra details. Doing this just makes the whole thing hard to read. Also not 100% sure what the question is now, it looks like in your last comment you've almost got the answer. Join conditions using logic operators in a single select (You've got an extra '$' in there btw) Хорошо, я обновил, опубликовав код





согласно решению Вот ссылка! и хотя решение сделано на C# @MichaelPetrotta, но для меня это лучшее решение
If dt.Rows.Cast(Of DataRow).Any() Then
row = dt.Select($"Barcode = '{Barcode}' AND Codeproduct = '{CodeProduct}' AND ColorCode = '{ColorCode}' AND Size = '{Size}'").FirstOrDefault()
End If
Аргумент, который вы передаете методу
Select, представляет собой просто предложение SQLWHERE. Такое предложение является просто логическим выражением. Как вы обычно строите логическое выражение, используя несколько критериев? Использование операторовANDиOR. Вы должны были прочитать соответствующую документацию и узнать это для себя. ДокументацияSelectсодержит ссылку на документациюExpression, в которой приведен этот пример:(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'. ВСЕГДА сначала читайте документацию.