Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net For循环遍历windows窗体中的所有CheckedListBox_Vb.net_Checkedlistbox - Fatal编程技术网

Vb.net For循环遍历windows窗体中的所有CheckedListBox

Vb.net For循环遍历windows窗体中的所有CheckedListBox,vb.net,checkedlistbox,Vb.net,Checkedlistbox,我已经为我的问题找到了解决方案,但处理起来太长了。 我想得到一些帮助,我可以循环检查表单中的所有10个checkedListBox,以便每一个都填充datagridview的一列。 这是我的密码 第一段代码: Dim dt As New DataTable dt.Columns.Add("Região", Type.GetType("System.String")) dt.Columns.Add("Produto", Type.GetType("System.String")) dt.Colum

我已经为我的问题找到了解决方案,但处理起来太长了。 我想得到一些帮助,我可以循环检查表单中的所有10个checkedListBox,以便每一个都填充datagridview的一列。 这是我的密码

第一段代码:

Dim dt As New DataTable
dt.Columns.Add("Região", Type.GetType("System.String"))
dt.Columns.Add("Produto", Type.GetType("System.String"))
dt.Columns.Add("Cliente", Type.GetType("System.String"))
dt.Columns.Add("Tipo Atividade", Type.GetType("System.String"))
dt.Columns.Add("Acabamento", Type.GetType("System.String"))
dt.Columns.Add("Cores", Type.GetType("System.String"))
dt.Columns.Add("Gramagem", Type.GetType("System.String"))
dt.Columns.Add("Tipo Embalagem", Type.GetType("System.String"))
dt.Columns.Add("Formatos", Type.GetType("System.String"))
dt.Columns.Add("Contagem", Type.GetType("System.String"))
dt.Columns.Add("Transporte", Type.GetType("System.String"))
dt.Columns.Add("Moeda", Type.GetType("System.String"))
dt.Columns.Add("Preço", Type.GetType("System.String"))
dt.Columns.Add("Data Inicio", Type.GetType("System.String"))
dt.Columns.Add("Data Fim", Type.GetType("System.String"))
dt.Columns.Add("Standard", GetType(Boolean))

Dim dataInicio, dataFim As String
dataInicio = DateTimeInicio.Value.ToString("dd-MM-yyyy")
dataFim = DateTimeFim.Value.ToString("dd-MM-yyyy")
Dim a, b, c, d, f, g, h, i, j, k As Integer
Dim dr As DataRow = dt.NewRow
第二段代码:

 For a = 0 To ChkListRegiao.Items.Count - 1
            For b = 0 To ChkListProduto.Items.Count - 1
                For c = 0 To ChkListTipoAtividade.Items.Count - 1
                    For d = 0 To ChkListAcabamento.Items.Count - 1
                        For f = 0 To ChkListCores.Items.Count - 1
                            For g = 0 To ChkListGramagem.Items.Count - 1
                                For h = 0 To ChkListTipoEmbalagem.Items.Count - 1
                                    For i = 0 To ChkListFormatos.Items.Count - 1
                                        For j = 0 To ChkListContagem.Items.Count - 1
                                            For k = 0 To ChkListTransporte.Items.Count - 1
                                                dr("Região") = ChkListRegiao.GetItemChecked(a)
                                                dr("Produto") = ChkListProduto.GetItemChecked(b)
                                                dr("Cliente") = ""
                                                dr("Tipo Atividade") = ChkListTipoAtividade.GetItemChecked(c)
                                                dr("Acabamento") = ChkListAcabamento.GetItemChecked(d)
                                                dr("Cores") = ChkListCores.GetItemChecked(f)
                                                dr("Gramagem") = ChkListGramagem.GetItemChecked(g)
                                                dr("Tipo Embalagem") = ChkListTipoEmbalagem.GetItemChecked(h)
                                                dr("Formatos") = ChkListFormatos.GetItemChecked(i)
                                                dr("Contagem") = ChkListContagem.GetItemChecked(j)
                                                dr("Transporte") = ChkListTransporte.GetItemChecked(k)
                                                dr("Moeda") = txtMoeda.Text
                                                dr("Preço") = txtPrecoTon.Text
                                                dr("Data Inicio") = dataInicio
                                                dr("Data Fim") = dataFim
                                                dr("Standard") = chkStandard.Checked
                                                If ChkListRegiao.GetItemChecked(a) And ChkListProduto.GetItemChecked(b) And ChkListTipoAtividade.GetItemChecked(c) And
                                                    ChkListAcabamento.GetItemChecked(d) And ChkListCores.GetItemChecked(f) And ChkListGramagem.GetItemChecked(g) And
                                                    ChkListTipoEmbalagem.GetItemChecked(h) And ChkListFormatos.GetItemChecked(i) And ChkListContagem.GetItemChecked(j) And
                                                    ChkListTransporte.GetItemChecked(k) Then
                                                    dt.Rows.Add(ChkListRegiao.Items(a), ChkListProduto.Items(b), "", ChkListTipoAtividade.Items(c), ChkListAcabamento.Items(d), ChkListCores.Items(f),
                                                                ChkListGramagem.Items(g), ChkListTipoEmbalagem.Items(h), ChkListFormatos.Items(i),
                                                                ChkListContagem.Items(j), ChkListTransporte.Items(k), txtMoeda.Text, txtPrecoTon.Text, dataInicio, dataFim, chkStandard.Checked)
                                                    DataGridView1.DataSource = dt
                                                End If
                                            Next
                                        Next
                                    Next
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next
以这条线为例:

DataGridView1.DataSource = dt
并在所有循环结束后移动它。这不是唯一让你慢下来的事情,但我怀疑这是最大的。。。尝试在每次更改后重建网格

此外,在调用其他级别之前,可以重新构造循环以在每个级别进行过滤,这样可以节省大量工作。例如,假设您只有3个列表,每个列表中选择了10个项目中的5个。原始代码将运行整个
if()
条件1000次,每次执行3个布尔比较,以便只生成125个结果。通过在降级到下一级之前对每一级进行筛选,可以最大限度地减少失败检查的数量。如果不预缓存选择,则相同的3个列表只需要310个布尔检查就可以生成相同的125个结果,如果执行以下操作,则需要30个布尔检查+一点额外内存:

Dim dt As New DataTable
dt.Columns.Add("Região", Type.GetType("System.String"))
dt.Columns.Add("Produto", Type.GetType("System.String"))
dt.Columns.Add("Cliente", Type.GetType("System.String"))
dt.Columns.Add("Tipo Atividade", Type.GetType("System.String"))
dt.Columns.Add("Acabamento", Type.GetType("System.String"))
dt.Columns.Add("Cores", Type.GetType("System.String"))
dt.Columns.Add("Gramagem", Type.GetType("System.String"))
dt.Columns.Add("Tipo Embalagem", Type.GetType("System.String"))
dt.Columns.Add("Formatos", Type.GetType("System.String"))
dt.Columns.Add("Contagem", Type.GetType("System.String"))
dt.Columns.Add("Transporte", Type.GetType("System.String"))
dt.Columns.Add("Moeda", Type.GetType("System.String"))
dt.Columns.Add("Preço", Type.GetType("System.String"))
dt.Columns.Add("Data Inicio", Type.GetType("System.String"))
dt.Columns.Add("Data Fim", Type.GetType("System.String"))
dt.Columns.Add("Standard", GetType(Boolean))

Dim dataInicio As String = DateTimeInicio.Value.ToString("dd-MM-yyyy")
Dim dataFim As String = DateTimeFim.Value.ToString("dd-MM-yyyy")

'Uncached:
For Each a In ChkListRegiao.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
    For Each b In ChkListProduto.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
        For Each c In ChkListTipoAtividade.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
            For Each d In ChkListAcabamento.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
                For Each f In ChkListCores.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
                    For Each g In ChkListGramagem.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
                        For Each h In ChkListTipoEmbalagem.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
                            For Each i In ChkListFormatos.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
                                For Each j In ChkListContagem.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)
                                    For Each k In ChkListTransporte.Items.Cast(Of ListItem)().Where(Function(li) li.Selected)

                                        dt.Rows.Add(a, b, "", c, d, f, g, h, i, j, k, txtMoeda.Text, txtPrecoTon.Text, dataInicio, dataFim, chkStandard.Checked)

                                    Next
                                Next
                            Next
                        Next            
                    Next
                Next
            Next
        Next
    Next 
Next
DataGridView1.DataSource = dt

'Cached:
Dim regiao = ChkListRegiao.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()
Dim produto = ChkListProduto.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()
Dim tipoatividade = ChkListTipoAtividade.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()
Dim acabamento = ChkListAcabamento.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()
Dim cores = ChkListCores.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()
Dim gramagem = ChkListGramagem.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()
Dim tipoembalagem = ChkListTipoEmbalagem.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList() 
Dim formatos = ChkListFormatos.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()
Dim contagem = ChkListContagem.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()
Dim transporte = ChkListTransporte.Items.Cast(Of ListItem)().Where(Function(li) li.Selected).ToList()

For Each a In regiao
    For Each b In produto
        For Each c In tipoatividade
            For Each d In acabamento
                For Each f In cores
                    For Each g In gramagem
                        For Each h In tipoembalagem
                            For Each i In formatos
                                For Each j In contagem
                                    For Each k In transporte

                                        dt.Rows.Add(a, b, "", c, d, f, g, h, i, j, k, txtMoeda.Text, txtPrecoTon.Text, dataInicio, dataFim, chkStandard.Checked)

                                    Next
                                Next
                            Next
                        Next            
                    Next
                Next
            Next
        Next
    Next 
Next
DataGridView1.DataSource = dt
您需要尝试这两种方法,以确定哪种方法对您的环境更快


但这似乎也错了。你真的想要从所有列表中选择所有可能的项目组合吗?

我看不到图像,你能直接发布代码吗?发布代码而不是图像请不要发布代码图像!请以文本而不是图像的形式发布代码。
ChkListRegiao.Items.Count的值是多少?对于
ChkListProduto.Items.Count
?等等?我会测试你告诉我的,是的,我现在需要所有可能的组合在最后一次之后它给我这个错误:System.InvalidCastException:'无法将'System.String'类型的对象强制转换为'xxxx.ListItem'。'我试图将dt.Columns.Add(“Região”,type.GetType(“System.String”))更改为dt.Columns.Add(“Regiãã”,GetType(ListItem)),但它仍然传递相同的错误