如果不满足这两种情况,此代码块可以正常工作。不幸的是,如果在程序的同一实例运行中满足两种情况,则搜索的两列被组合或递增。但结果并没有结合。只是列。例如:Case" Server"将有A1,A2,A3列无论我通过案例服务器运行多少次,它都会很好。但如果我运行病例"患者",我的列现在将是A1,A2,A3,B1,B2,B3。如果我运行案例患者然后案例服务器,它会是相同的,但列将是不同的顺序。
Private Sub frmSearch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
With dgvSearch
dt.Clear()
.DataSource = Nothing
.Columns.Clear()
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill 'this does not allow resizing of column width
Select Case formSwitch
Case "Server"
sql = "Select cnn, server, port, uid, detail from tbl_cnnstrings"
SelectQuery(lcnn, 3)
.DataSource = dt
.Columns(0).HeaderText = "Connection Name"
.Columns(1).HeaderText = "Server"
.Columns(2).HeaderText = "Port"
.Columns(3).HeaderText = "Uid"
.Columns(4).HeaderText = "Detail"
Try 'this code block resizes column and bypass error
.Columns(2).Width = 50
Catch ex As Exception
End Try
Case "Patients"
sql = "Select concat(patientid_yr, '-', patientid_m, '-', patientid_no) as patientid, concat_ws(' ', lname, ',', fname, ' ', mname) as name from tbl_patinfo order by name;"
SelectQuery(cnn, 3)
.DataSource = dt
.Columns(0).HeaderText = "Patient ID"
.Columns(1).HeaderText = "Patient Name"
Try 'this code block resizes column and bypass error
.Columns(0).Width = 100
Catch ex As Exception
End Try
End Select
End With
End Sub
我的理论是我没有正确清理数据表。 仅供参考:dt =数据表,da = mysqldataadapter,SelectQuery = mysql连接和查询的自定义子。 lcnn和cnn只是连接字符串。 样本输出: http://i58.tinypic.com/30jkwb9.png
答案 0 :(得分:1)
网格不会自动删除任何列。它会自动添加新列,但您必须手动删除它们。如果您要更改数据源,请先将DataSource
设置为Nothing,然后将Clear
Columns
集合设置为DataSource
,然后再次设置{{1}}。
答案 1 :(得分:0)
在每种情况下放置dt.clear()而不是在case语句之外,或者我会为每个查询设置不同的数据和命令,试一试,如果我没有任何帮助,我很抱歉...
答案 2 :(得分:0)
dt = New Datatable
我发现了自己的错误。显然我每次使用它时都必须声明我的数据表是新的。否则,里面的数据将继续附加。