【问题标题】:ImportRow is not workingImportRow 不工作
【发布时间】:2011-10-25 14:40:08
【问题描述】:

在下面的示例中,它返回了 2 行,并且 importrow 没有抛出任何异常,但是当我在 foreach 之后看到数据表时它是空的,它也应该有 2 行。

foreach (int refmDossierId in distinctREFMDossierIds)
{
    DataRow[] datarows =
                    _uc090_WingsIntegrationDataSet.WingsBookingInterface.Select("REFMDossierID =" + refmDossierId);
    if(datarows.Length>0)
    {
        foreach(DataRow dr in datarows)
        {
            _uc090_WingsIntegrationDataSet.WingsBookingInterface.Clear();
            _uc090_WingsIntegrationDataSet.WingsBookingInterface.ImportRow(dr);
        }
    }

    //2.     foreach master row
    foreach (UC090_WingsIntegrationDataSet.WingsBookingInterfaceRow row in _uc090_WingsIntegrationDataSet.WingsBookingInterface.Rows)
    {

【问题讨论】:

  • 我认为问题在于我在 foreach 内部进行了清理,我将该行移到了 foreach 之前,但是它还没有工作,它两次进入 foreach,但最后数据表是空的.
  • 我看到的一个问题是您在每次导入之前都要清除表格,所以我希望最多只有一行。但是,也许对 _uc090_WingsIntegrationDataSet.WingsBookingInterfaceUC090_WingsIntegrationDataSet.WingsBookingInterfaceRow 是什么以及为什么在第一步中使用 DataRow 和第二步中的自定义类型进行一些解释可能会给我们更多的帮助。
  • 确实,我希望有一行,但我解决了这个问题,但仍然看不到任何行。这些是类型化的数据集,我只需要过滤数据表,然后遍历结果。
  • 您是否尝试过使用foreach (DataRow row in _uc090_WingsIntegrationDataSet.WingsBookingInterface) 而不是UC090_WingsIntegrationDataSet.WingsBookingInterfaceRow
  • 这不是我需要的,我会失去输入列的智能感知

标签: .net asp.net ado.net


【解决方案1】:

上面的答案以更简单的形式(c#编码)可以看成:

string dt1Query = "SELECT ColumnName FROM tableName";
DataTable dt1 = new DataTable();
using (SqlCommand cmd = new SqlCommand(dt1Query, objConn))
{
    dt1.Load(cmd.ExecuteReader());
}

DataTable dt2 = dt1.Clone();

foreach (DataRow dt1Row in dt1.Rows)
{
    // some code here if need to work anything out before writing to dt2
    dt2.ImportRow(dt1Row);
}

只是为了帮助别人..

【讨论】:

    【解决方案2】:

    蒂姆是正确的。示例。

        Private Sub SortAddress(ds As DataSet)
    
            Dim sourceTable As DataTable = ds.Tables(0)
    
    
            Dim targetTable As DataTable = ds.Tables(0).Clone()
    
            Dim sorted = sourceTable.Rows.Cast(Of DataRow)().OrderBy(Function(row) _
                                                                        _matchFirstNumberRegEx.Match(row("Col1")).Value) _
                                                            .ThenBy(Function(row) _
                                                                         _matchFirstNumberRegEx.Replace(row("Col1"), "")).ToList()
    
            ds.Tables.Remove(ds.Tables(0))
    
            For Each row In sorted
    
                targetTable.ImportRow(row)
            Next
    
            ds.Tables.Add(targetTable)
    
        End Sub
    

    【讨论】:

      【解决方案3】:

      只是一种预感,但也许您正在清除从中获取行集合的表的事实导致 DataRow 集合处于分离状态?如果是这种情况,请尝试 Clone 创建一个具有相同架构但没有行的新 DataTable,然后执行 Import

      foreach (int refmDossierId in distinctREFMDossierIds)
      {
          DataTable tempTable = _uc090_WingsIntegrationDataSet.WingsBookingInterface.Clone();
      
          DataRows[] datarows = _uc090_WingsIntegrationDataSet.WingsBookingInterface.Select("REFMDossierID = " + refmDossierId);
      
          if (datarows.Length > 0)
          {
              foreach(DataRow dr in datarows)
              {
                  tempTable.ImportRow(dr);
              }
          }
      
          foreach (UC090_WingsIntegrationDataSet.WingsBookingInterfaceRow row in tempTable.Rows)
          {
              //  Do your processing here
          }
      }
      

      顺便说一句,您当前的代码将在第一个 ID 之后擦除表格 - 如果您处理的 ID 不止一个,这可能会出现问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-12
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        相关资源
        最近更新 更多