Code ด้านล่างนี้เป็น Code ที่สามารถให้ User เลือกข้อมูลที่ไม่ต้องการได้แต่ ได้แค่ MachineID ตัวเดียว แล้วถ้าหากเราต้องการให้ User เลือกข้อมูลที่ไม่ต้องการมากกว่า 1 ตัว ต้องทำอย่างไรครับ แต่ถ้าเกิดเราเพิ่ม Textbox เท่ากับจำนวนที่ User ไม่ต้องการก็จะสามารถทำได้แต่ในกรณีนี้เราไม่ทราบว่าข้อมูลที่ User ไม่ต้องการมีข้อมูลมากน้อยเท่าไร
รบกวนด้วยครับ ขอบคุณครับ
Code (VB.NET)
Sub InitialMachine()
Dim cmd As New SqlCommand
Dim da As New SqlDataAdapter
Dim ds As New DataSet
Try
With cmd
.Connection = mycon
.CommandType = CommandType.Text
.CommandText = "select MachineName from T_Machine where MachineID<>'" & TextBox1.Text & "' "
' .CommandText = " '" & TextBox1.Text & "' "
End With
da.SelectCommand = cmd
da.Fill(ds, "Matco1_Machine") 'Keep data to Dataset
cboMachineName.DataSource = ds.Tables("Matco1_Machine")
cboMachineName.DisplayMember = "MachineName"
cboMachineName.ValueMember = "MachineName"
Catch exsql As SqlException
MsgBox(exsql.Message, MsgBoxStyle.Exclamation)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Dim sql1 As String = "SELECT * FROM SYS.TABLES ORDER BY Name"
Dim dt As New DataTable
dt = gGetDataTable(sql1)
If dt IsNot Nothing Then
If dt.Rows.Count > 0 Then
For Each dr As DataRow In dt.Rows
Me.cboTableName.Items.Add(dr("Name"))
Next
End If
dt.Dispose()
dt = Nothing
End If
Private Sub cboTableName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboTableName.SelectedIndexChanged
Me.lvwColumn.Items.Clear()
Dim sql1 As String = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = " & gSQ(Me.cboTableName.Text)
Dim dt As New DataTable
dt = gGetDataTable(sql1)
If dt IsNot Nothing Then
If dt.Rows.Count > 0 Then
Dim lvwItem As ListViewItem
For Each dr As DataRow In dt.Rows
lvwItem = lvwColumn.Items.Add(dr("COLUMN_NAME"))
Next
End If
dt.Dispose()
dt = Nothing
End If
End Sub
จัดการคิวรี่และแสดงข้อมูล Code (VB.NET)
Private Sub btnQuery_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuery.Click
Dim tempCol As String = " "
For i As Integer = 0 To Me.lvwColumn.Items.Count - 1
If Me.lvwColumn.Items(i).Checked Then
tempCol &= Me.lvwColumn.Items(i).SubItems(0).Text & ", "
End If
Next
If (tempCol.Equals(" ")) Then
Exit Sub
End If
Dim newStr As String = tempCol.Remove(tempCol.Length - 2, 2)
newStr &= " "
Dim sql1 As String = "SELECT " & newStr & " FROM " & Me.cboTableName.Text
Dim dt As New DataTable
dt = gGetDataTable(sql1)
If dt IsNot Nothing Then
Me.dgv1.DataSource = dt
dt.Dispose()
dt = Nothing
End If
End Sub
ฟังก์ชั่นสำหรับคิวรี่ข้อมูล Code (VB.NET)
Public Function gGetDataTable(ByVal pQryString As String, _
Optional ByVal pConn As SqlClient.SqlConnection = Nothing, _
Optional ByVal pIsSilenceMode As Boolean = False) As DataTable
If pQryString Is Nothing OrElse pQryString.Length = 0 Then
Return Nothing
End If
Dim dt As New DataTable
Dim da As New SqlClient.SqlDataAdapter
Dim conn As New SqlClient.SqlConnection("ตรงนี้ใส่ Connection String ของคุณลงไป")
If pConn IsNot Nothing Then
conn = pConn
End If
Try
If conn.State <> ConnectionState.Open Then
conn.Open()
End If
Catch ex As Exception
Return Nothing
End Try
Try
Dim qry As String = pQryString
If pConn IsNot Nothing Then
da = New SqlClient.SqlDataAdapter(qry, conn)
Else
da = New SqlClient.SqlDataAdapter(qry, conn)
End If
da.SelectCommand.CommandTimeout = 0
da.Fill(dt)
Catch ex As Exception
If Not pIsSilenceMode Then
DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Finally
If da IsNot Nothing Then
da.Dispose()
GC.SuppressFinalize(da)
da = Nothing
End If
End Try
Return dt
End Function
ฟังก์ชั่นเสริมเล็กๆ Code (VB.NET)
Private Function gSQ(ByVal pText As String) As String
Return "'" & pText.Replace("'", "") & "'"
End Function