2012-05-13 17 views
1

同じ値を持っていたDataTableの行(VB)をマージする方法:私は値を持つ1つのDataTable tempDTを持って

Serial_No      testong 
--------------------------------------- 
DTSHCSN001205035919201   [ OUT ] <br/> Partner : 90000032 <br/> Date : 16 Feb 2012 
DTSHCSN001205035919201   [ IN ] <br/> Partner : 90000032 <br/> Date : 16 Feb 2012 
DTSHCSN001205035919201   [ OUT ] <br/> Partner : 80000869 <br/> Date : 31 Mar 2012 
DTSHCSN001205035919201   [ IN ] <br/> Partner : 80000869 <br/> Date : 31 Mar 2012 

私はtestongの値が新しいに追加する1行に重複serial_noをマージしたいという問題カラム。

私は多くの方法を試しましたが、解決策を見つけることができません。私は結果がデバッグする場合

Dim tempDt = GetItemDataTable() 
    Dim dtData As New DataTable 

    dtData.Columns.Add("Serial_No") 
    Dim i As Integer = 0 
    Dim row As DataRow 

    For Each row In tempDt.Rows 
     i += 1 
     Dim dr As DataRow = dtData.NewRow 
     dr("Serial_No") = row(0) 
     If dr("Serial_No") = row(0) Then 
      Dim colBaru As GridViewDataTextColumn = New GridViewDataTextColumn() 
      colBaru.Caption = i 
      colBaru.FieldName = i 
      colBaru.CellStyle.HorizontalAlign = HorizontalAlign.Center 
      colBaru.HeaderStyle.HorizontalAlign = HorizontalAlign.Center 
      colBaru.Width = 150 

      colBaru.UnboundType = DevExpress.Data.UnboundColumnType.Integer 
      colBaru.VisibleIndex = grid.VisibleColumns.Count 
      colBaru.PropertiesTextEdit.DisplayFormatString = "d1" 
      colBaru.PropertiesTextEdit.EncodeHtml = True 
      grid.Columns.Add(colBaru) 
      dtData.Columns.Add(i) 
      dr(i) = row(3) 
      dtData.Rows.Add(dr) 

     Else 
      dr("Serial_No") = row(0) 
      dtData.Rows.Add(dr) 
     End If 

:ここ

は、背後に私のコードです wrong result

しかし、私は結果がこのようなものですたかった。私は自分のコードを更新しました enter image description here

答えて

1

ので、変数iを使用して列を調べます。

Dim tempDt = GetItemDataTable() 
Dim dtData As New DataTable 

'initial the first and second columns 
dtData.Columns.Add("Serial_No") 
dtData.Columns.Add("1") 

Dim i As Integer = 0 
Dim row As DataRow 

For Each row In tempDt.Rows 
    Dim dr As DataRow 
    i += 1 
    'check if the serial no exists in the new Data Table 
    If dtData.Select("Serial_No='" & row(0) & "'").Length > 0 Then 



     'If found, then get the existing row 
     dr = dtData.Select("Serial_No='" & row(0) & "'")(0) 

     'Create new GridViewDataTextColumn 
     Dim colBaru As GridViewDataTextColumn = New GridViewDataTextColumn() 
     colBaru.Caption = i 
     colBaru.FieldName = i 
     colBaru.CellStyle.HorizontalAlign = HorizontalAlign.Center 
     colBaru.HeaderStyle.HorizontalAlign = HorizontalAlign.Center 


     colBaru.UnboundType = DevExpress.Data.UnboundColumnType.Integer 
     colBaru.VisibleIndex = grid.VisibleColumns.Count 
     colBaru.PropertiesTextEdit.DisplayFormatString = "d1" 
     colBaru.PropertiesTextEdit.EncodeHtml = False 
     grid.Columns.Add(colBaru) 

     'I assume you are adding the Number as the columns name 
     'Only need to create if the Column doesn't exist 
     If dtData.Columns.count - 1 < i Then 
      dtData.Columns.Add(i.ToString) 
     End If 

     'Use variable i here 
     dr(i) = row(3) 

     'Comment this out as you don't need to 
     'dtData.Rows.Add(dr) 
    Else 

     'reset value of i 
     i = 1 

     'If not found, then create a new row 
     dr = dtData.NewRow 
     ' i put this to add the serial_no value to datatable 
     dr("Serial_No") = row(0) 

     'for adding first value i with same row as serial_no 
     Dim colBaru As GridViewDataTextColumn = New GridViewDataTextColumn() 
     colBaru.Caption = i 
     colBaru.FieldName = i 
     colBaru.CellStyle.HorizontalAlign = HorizontalAlign.Center 
     colBaru.HeaderStyle.HorizontalAlign = HorizontalAlign.Center 


     colBaru.UnboundType = DevExpress.Data.UnboundColumnType.Integer 
     colBaru.VisibleIndex = grid.VisibleColumns.Count 
     colBaru.PropertiesTextEdit.DisplayFormatString = "d1" 
     colBaru.PropertiesTextEdit.EncodeHtml = False 
     grid.Columns.Add(colBaru) 

     'dtData.Columns.Add("1") 

     'Would be better to use back variable i if you have reset it 
     dr(i) = row(3) 


     dtData.Rows.Add(dr) 
    End If 
Next 
+0

あなたの応答にはニックネームに感謝していますが、依然として正しい解決策が提供されていません。あなたは何かを忘れてしまった、私はDr = dtData.NewRowの後に他の条件がSerial_Noを追加するためにdr(Serial_No)=行(0)を置く。問題は現在、データテーブルに追加しない最初のループの行(3)の値である。行(0)が追加された後、行(3)の2番目の値が読み込まれます。私はdr(i)=行(3)をelse条件に入れてみました。しかしそれは働かない。 – tyo

+0

if else条件の前に 'dr(Serial_No)= row(0)'を置くのはあなたの条件が常に真であるかどうか疑問です。それで、新しい行を作りませんか?また、私はサイドで宣言されているので、単に 'dtData.Columns.Add(1)'と 'dr(0)= row(3)'を入れておく必要があります。 – Nick

+0

yapは正しいですが、 (シリアル)=行(0)else条件では、値は挿入されません。私はあなたの答えを修正しました。それが正しく働いています。とにかくおかげさまで...今日はこのモダールの締め切りです。あなたは私の救い主です。 :P – tyo

関連する問題