У меня есть база данных SQL с полями [ServiceDate], [CLID], [Reading], [DueAmt], [PaidAmt], [Balance] и [Status]. Идея состоит в том, чтобы выбрать учетные записи, которые не были оплачены последние 4 месяца, и вывести результат в элемент управления Listivew с помощью VB.Net (VS18 IDE). Мне нужна помощь с примером или справкой о том, как написать этот запрос из среды Visual Studio IDE с помощью VB.Net.
Большинство других платформ, которые я посетил, не предоставляют достаточных пояснительных примечаний и кодов, чтобы получить то, что я должен делать, и извлечь из этого уроки. Кроме того, я хочу, чтобы столбец для ServiceDate в элементе управления Listview был отформатирован как краткая дата, DueAmt, PaidAmt и Balance to Currency.
Буду признателен за любую помощь Спасибо.
Вам следует разбить вашу проблему на более мелкие. У вас происходит много разных вещей. Начните с простого запроса и верните данные. Затем попробуйте поместить эти данные куда-нибудь. Затем попробуйте отформатировать данные. ect ...
@JacobH Я могу сказать и то, и другое. Я застрял при написании запроса, чтобы получить желаемый результат, и снова да при выводе или отображении в элементе управления listview, так что [ServiceDate] форматируется по короткой дате, [Reading] по числу, [DueAmt], [PaidAmt] и [Баланс] к деньгам. В этом плане мне будет полезен пример. У меня есть элемент управления Listview с именем lsvClients для отображения такого результата. Кроме того, у меня есть поле со списком cboFilters, где я вручную ввел эти фильтры для запроса различных параметров. Обычный фильтр гласит: «Просмотреть все неоплаченные счета за последние 3 месяца», если я смогу научиться составлять очередь


Я принял SQL Server, [ServiceDate] как DataTime в базе данных и [Balance] как какое-то число в базе данных.
Private Function GetOldAccounts() As DataTable
Dim dt As New DataTable
Using cn As New SqlConnection("Your connection string")
Using cmd As New SqlCommand("Select * From YourTable Where [ServiceDate] < @d AND [Balance] > 0")
cmd.Parameters.Add("@d", SqlDbType.DateTime).Value = DateTime.Now.AddMonths(-4)
cn.Open()
Using dr As SqlDataReader = cmd.ExecuteReader
If dr.HasRows Then
dt.Load(dr)
Else
Return Nothing
End If
End Using
End Using
End Using
Return dt
End Function
Я думал, вы сможете найти, как заполнить ListView из DataTable. ListViews отображают текстовое свойство, которое является строкой. Если вам нужны типизированные столбцы, посмотрите DataGridView, который можно легко привязать к DataTable.
Private Sub FillListView()
Dim dt As DataTable = GetOldAccounts()
lv.Items.Clear()
Dim lstAccounts As New List(Of ListViewItem)
lv.BeginUpdate() 'keeps the control from repaintinng on every iteration
For Each r As DataRow In dt.Rows
Dim li As New ListViewItem()
li.Text = CDate(r("ServiceDate")).ToShortDateString
li.SubItems.Add(r("CLID").ToString)
li.SubItems.Add(r("Reading").ToString)
li.SubItems.Add(r("DueAmt").ToString)
li.SubItems.Add(CDec(r("PaidAmt")).ToString("N2"))
li.SubItems.Add(CDec(r("Balance")).ToString("C")) 'Will include the $
li.SubItems.Add(r("Status").ToString)
Dim i As Integer
Dim s As String = i.ToString("C")
lstAccounts.Add(li)
Next
lv.BeginUpdate() 'keeps the control from repaintinng on every addition
lv.Items.AddRange(lstAccounts.ToArray)
lv.EndUpdate()
End Sub
Что ж, спасибо за код, но как мне отобразить результат функции в элементе управления Listview и иметь формат элемента управления [ServiceDate] как короткую дату, [Reading] как число, [DueAmt], [PaidAmt] и [Balance] как Деньги?
Смотрите обновление моего ответа. Если мой ответ был полезен, примите его как ответ, поставив галочку (галочку) слева от ответа.
Спасибо Мэри за твои усилия. Я опробую код и незамедлительно сообщу вам, и, если он сработает, я обязательно проголосую за ваш ответ. А пока я закрываю свою лабораторию, поскольку приближается суббота. Я вернусь сразу же, как только суббота закончится.
Спасибо, Мэри, я просмотрел ваш код и, внимательно проследив за ним, скопировал его следующим образом: функция GetOldAccounts () скопирована на уровень модуля, чтобы я мог повторно использовать ее в любом случае на протяжении всего проекта, процедура FillListView Sub скопирована в вызывающую форму и в рамках процедуры события нажатия кнопки. С сожалением сообщаю вам, что после многократного запуска кода функция не вернула никакого значения, поэтому элемент управления listview не был заполнен. Я не уверен, что мне здесь что-то не хватает: где разместить код или как настроить сам элемент управления listview. Однако я дал на этот ответ че
Проверьте, совпадают ли типы данных в базе данных. ServiceDate хранится как Date или DateTime? Баланс - это число? Попробуйте выполнить запрос в SQL Server Management Studio. Вы можете получить поучительную ошибку. Сразу после If dr.HasRows Then добавьте окно сообщения с надписью "У нас есть строки!" Обычно нет окон сообщений для отладки. Если вы можете установить точку останова и пройти через нее, это будет лучше.
VS не очень хорошо разработан для написания SQL-запросов. У каждого механизма SQL есть собственная IDE, которая (обычно) намного лучше (например, SSMS для SQL Server). На какой части ты здесь застрял? Пишете SQL-запрос? Или установить результаты в список? Если вы предоставите свой существующий код, вам будет легче помочь. Кроме того, какую реляционную систему баз данных (SQL Server, Oracle, MySQL и т. д.) Вы используете?