解决DataGridView中XML参数数据被覆盖,合并显示IDCSITORD=1和5的数据
解决DataGridView合并显示两个XML参数数据的问题
当前代码每次循环都会重新执行查询与绑定操作,导致第二次的数据源直接覆盖第一次的结果。要实现合并显示IDCSITORD为1和5的数据,需要先收集两次查询的结果集,再统一绑定到DataGridView。
修改思路
- 先创建一个用于存储合并数据的容器(如
DataTable) - 循环查询时,将每次的查询结果追加到合并容器中
- 循环结束后,将合并后的容器作为数据源绑定到DataGridView
修改后的代码示例
List<string[]> parametrosList = new List<string[]>(); // 添加IDCSITORD = 1的参数 string[] parametros1 = filtro.GetParametros(); string xmlParametros1 = parametros1[1]; xmlParametros1 = ModificarValorIDCSITORD(xmlParametros1, 1); parametros1[1] = xmlParametros1; parametrosList.Add(parametros1); // 添加IDCSITORD = 5的参数(修正原代码注释与实际值不一致的问题) string[] parametros2 = filtro.GetParametros(); string xmlParametros2 = parametros2[1]; xmlParametros2 = ModificarValorIDCSITORD(xmlParametros2, 5); parametros2[1] = xmlParametros2; parametrosList.Add(parametros2); dgVisao.DataBindings.Clear(); DataTable mergedData = null; foreach (var parametros in parametrosList) { // 查询当前参数对应的数据源 ctrl.List(parametros); var currentSource = ctrl.Provider.GetBindingSource; // 将当前数据复制到合并表中 DataTable currentTable = ((DataView)currentSource.DataSource).ToTable(); if (mergedData == null) { mergedData = currentTable.Copy(); } else { mergedData.Merge(currentTable); } } // 绑定合并后的数据源到DataGridView if (mergedData != null) { var bindingSource = new BindingSource(); bindingSource.DataSource = mergedData; dgVisao.DataSource = bindingSource; Navigator.BindingSource = bindingSource; // 设置列头文本 if (filtro.TipoOperacao == SASistemas.Controls.Wms.Filtros.enumTipoOperacao.Saida) NOMCLIFOR.HeaderText = "Cliente"; else NOMCLIFOR.HeaderText = "Fornecedor"; dgVisao.Focus(); this.UpdateGauges(); }
关键说明
- 避免重复绑定:不再在循环内执行绑定操作,而是先收集所有数据再一次性完成绑定
- 数据合并:使用
DataTable.Merge方法将两次查询的结果合并,保留所有行数据 - 注释修正:同步修正原代码中注释与实际参数值不一致的问题,避免逻辑混淆
内容的提问来源于stack exchange,提问作者Bruno Ananias
相关产品推荐
相关产品推荐

