Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: VB

Программирование VB

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: изменение значений в DATAGRIDVIEW в зависимости от значений в ComboBox
 
 автор: Едрёныч   (29.03.2010 в 15:19)   личное сообщение
 
 

создал хранимую процедуру для выборки Фамилии покупателя в зависимости от CustomerID
в базе Northwind
ALTER PROCEDURE sp_ContactName
@CustomerID nchar
AS
SELECT Customers.ContactName, Customers.CompanyName, Orders.CustomerID
FROM Customers INNER JOIN
Orders ON Customers.CustomerID = Orders.CustomerID
WHERE (Orders.CustomerID = @CustomerID)
/* SET NOCOUNT ON */
RETURN

написал на форме код
комбобокса:
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.Data.SqlClient.SqlConnectionStringBuilder
Public Class Form3
'загружаю данные в Combobox1
Public Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim strConn3 As New SqlConnectionStringBuilder()
Dim strSQL3 As String
'strConn3 = "Data Source=.\SQLExpress;Initial Catalog=Northwind;Integrated Security=True;"
strConn3.DataSource = ".\SQLExpress"
strConn3.InitialCatalog = "Northwind"
strConn3.IntegratedSecurity = True
Using cn3 As New SqlConnection(strConn3.ConnectionString)
cn3.Open()
strSQL3 = "SELECT DISTINCT CustomerID FROM Orders"
Dim da3 As New SqlDataAdapter(strSQL3, cn3)
Dim ds3 As New DataSet()
da3.Fill(ds3, "Orders")
With ds3
Me.ComboBox1.DataSource = .Tables("Orders")
Me.ComboBox1.DisplayMember = "CustomerID"
End With
End Using
End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
' пытаюсь изменить значения в DATAGRIDVIEW1
Dim strConn4 As New SqlConnectionStringBuilder()
strConn4.DataSource = ".\SQLExpress"
strConn4.InitialCatalog = "Northwind"
strConn4.IntegratedSecurity = True
Using cn4 As New SqlConnection(strConn4.ConnectionString)
cn4.Open()
Dim cmd As New SqlCommand("sp_ContactName", cn4)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue(@CustomerID,SqlDbType.NChar)

Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds, "Customers")
DataGridView1.DataBindings.Add("", (ds), "Customers")
DataGridView1.DataMember = "Customers"
DataGridView1.DataSource = ds
cn4.Close()

End Using
End Sub
End Class
подскажите что упустил, где ошибка?
понимаю, что надо привязать данные к Datagridview, но как это правильно сделать не знаю

  Ответить  
 
 автор: Мюллер   (29.03.2010 в 17:37)   личное сообщение
 
 


Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.Data.SqlClient.SqlConnectionStringBuilder
Public Class Form3
'загружаю данные в Combobox1
Public Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim strConn3 As New SqlConnectionStringBuilder()
Dim strSQL3 As String
'strConn3 = "Data Source=.\SQLExpress;Initial Catalog=Northwind;Integrated Security=True;"
strConn3.DataSource = ".\SQLExpress"
strConn3.InitialCatalog = "Northwind"
strConn3.IntegratedSecurity = True
Using cn3 As New SqlConnection(strConn3.ConnectionString)
cn3.Open()
strSQL3 = "SELECT DISTINCT CustomerID FROM Orders"
Dim da3 As New SqlDataAdapter(strSQL3, cn3)
Dim ds3 As New DataSet()
da3.Fill(ds3, "Orders")
With ds3
Me.ComboBox1.DataSource = .Tables("Orders")
Me.ComboBox1.DisplayMember = "CustomerID"
Me.ComboBox1.ValueMember ="CustomerID"
End With
End Using
End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
' пытаюсь изменить значения в DATAGRIDVIEW1
Dim strConn4 As New SqlConnectionStringBuilder()
strConn4.DataSource = ".\SQLExpress"
strConn4.InitialCatalog = "Northwind"
strConn4.IntegratedSecurity = True
Using cn4 As New SqlConnection(strConn4.ConnectionString)
cn4.Open()
Dim cmd As New SqlCommand("sp_ContactName", cn4)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue(@CustomerID,Me.Combobox1.SelectedValue)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds, "Customers")
DataGridView1.DataBindings.Add("", (ds), "Customers")
DataGridView1.DataMember = "Customers"
DataGridView1.DataSource = ds
cn4.Close()

End Using
End Sub
End Class



Заодно проверьте вернет ли вам хранимка запрашиваемый набор данных. Я уже говорил вам, а может и не вам (склероз уже), что если сравниваете с текстовыми значениями, то в запросах лучше использовать конструкцию LIKE. Это если так хочется сравнивать два текстовых значения.
А почему не хотите использовать для выбора из таблиц целочисленные значения идентификаторов?

  Ответить  
 
 автор: Едрёныч   (30.03.2010 в 10:46)   личное сообщение
 
 

Да, LIKE работает вполне корректно, но ошибка где -то внутри кода
может так?
Dim CustomerID As SqlParameter
CustomerID = New SqlClient.SqlParameter("@CustomerID", SqlDbType.NChar)
CustomerID.Value = ComboBox1.SelectedItem

  Ответить  
 
 автор: Мюллер   (30.03.2010 в 13:48)   личное сообщение
 
 

Попробуйте так:

Using cn4 As New SqlConnection(strConn4.ConnectionString)
cn4.Open()
Dim cmd As New SqlCommand("sp_ContactName", cn4)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue(@CustomerID,Me.Combobox1.SelectedItem)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds, "Customers")
DataGridView1.DataBindings.Add("", (ds), "Customers")
DataGridView1.DataMember = "Customers"
DataGridView1.DataSource = ds
cn4.Close()

End Using

А вообще-то что за ошибка? Не передается параметр или компилятор выдает ошибку?
Возможно в VB есть какие-то особенности синтаксиса. Я сам уже плохо его помню.
В общем, давайте ошибку в студию - будем разбираться.
Хотя тот код, который я привел ,по идее , должен работать.

  Ответить  
 
 автор: Едрёныч   (30.03.2010 в 14:41)   личное сообщение
 
 

cmd.Parameters.AddWithValue(@CustomerID,Me.Combobox1.SelectedItem) пишет, что требуется выражение для @CustomerID
я ещё так делал:
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged


Dim strConn4 As New SqlConnectionStringBuilder()
strConn4.DataSource = ".\SQLExpress"
strConn4.InitialCatalog = "Northwind"
strConn4.IntegratedSecurity = True
Using cn4 As New SqlConnection(strConn4.ConnectionString)
cn4.Open()
Dim CustomerID As SqlParameter
CustomerID = New SqlClient.SqlParameter("@CustomerID", SqlDbType.NChar)
CustomerID.Value = ComboBox1.SelectedValue
Dim cmd As New SqlCommand("sp_ContactName", cn4)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar)
cmd.Parameters("@CustomerID") = CustomerID
cmd.Parameters.AddWithValue("@CustomerID", Me.ComboBox1.SelectedValue)


Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds, "Customers")
DataGridView1.DataBindings.Add("", (ds), "CustomerID")
DataGridView1.DataMember = "Customers"
DataGridView1.DataSource = ds
cn4.Close()
End Using
End Sub

ошибка появляется около da.Fill(ds, "Customers")

  Ответить  
 
 автор: Мюллер   (30.03.2010 в 15:58)   личное сообщение
 
 

Попробуйте так:




Dim SQLParam As SqlClient.SqlParameter
Dim dtMyTable As New DataTable("MyTable")

Using cn1 As New SqlConnection(strConn4.ConnectionString)
cn1.Open()
Dim da As New SqlDataAdapter("sp_ContactName", cn1)
da.SelectCommand.CommandType = CommandType.StoredProcedure
SQLParam = da.SelectCommand.Parameters.AddWithValue("@CustomerID", Me.ComboBox1.SelectedValue)
da.Fill(dtMyTable )
cn1.Close()
End Using
Dim vueMyView As DataView
vueMyView = New DataView
vueMyView .Table = dtMyTable
Me.DataGridView1.DataSource = vueMyView

  Ответить  
 
 автор: Едрёныч   (31.03.2010 в 10:04)   личное сообщение
 
 

нет, не фурычит. Связи с этим вопрос: где-нибудь можно посмотреть рабочий пример. Дайте ссылку, если не жалко. В книгах сложно разобраться, отдельные отрывки кодов без реальных примеров не очень помогают.

  Ответить  
 
 автор: Мюллер   (31.03.2010 в 14:09)   личное сообщение
 
 

Забыл дописать
Me.DataGridView1.DataBind()

У меня все фурычит. Причем и с объектом Command и с объектом DataTable и с объектом DataView

В связи с этим вопрос - какую именно ошибку выдает и где именно.
Перерд этим допишите к гриду DataBind() - этой командой вы привязываете грид к данным - читай заполняете грид.
Мои коды на VB, которые я писал ранее работают с моими базами SQL Server, поэтому прислать их не могу - коммерческо-конфиденциальная информация.
А то, что не является коммерческой информацией написано на C#, так, что толку от этих примеров будет мало.
Я в свое время изучал по книге Дэвида Сеппы "Программирование на ADO.NET 2.0" Там все подробно и досупно описано.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList