2016-02-02 4 views
1

Импорт данных из Excel в VisualBasic, я использую следующий код, чтобы изменить порядок столбцов:Как изменить порядок столбца в DataTable в vb.net?

Dim new_postion As Integer = dt_Excel.Columns.Count - 1 
      For i As Integer = 0 To dt_Excel.Columns.Count - 1 
       dt_Excel.Columns(i).SetOrdinal(new_postion) 
       new_postion = new_postion - 1 
      Next 
      DGV_Excel.DataSource = dt_Excel 

, но когда я показываю данные в DataGridView он по-прежнему в том же порядке.

ответ

1

То, что вы пытаетесь, не будет работать после назначения DataTable DataGridView, по крайней мере, не соответствующим образом.

Задайте позиции перед назначением DataTable в DataGridView. Источник данных лучше всего, но если это невозможно, используйте DisplayIndex, например. DataGridView1.Columns(x).DisplayIndex = y

Где x - индекс столбца для изменения, а y - это то, что мы тоже изменим.

Если вы случайно создали столбцы DataGridView в среде IDE, то DisplayIndex - единственный способ пойти.

+0

Я не хочу заказывать его только в DataGridView, мне нужно заказать DataTable, потому что я привык к сравнению с другим DataTable, я не хочу сравнивать его –

+0

Привет, Стив, я ответил бы с другим предложением если вы указали новое требование (как это было не в первоначальном вопросе), но даже тогда, когда сравнивается порядковая позиция, не имеет значения, как вы можете использовать (не зная точно, как вы сравниваете, так что это может не работать, тем более). это концептуально, чтобы получить точку в Dim result As Boolean = If (dt1.Rows (0) .Field (Of String) ("FirstName") = dt2.Rows (0) .Field (Of String) ("FirstName") , True, False) –

+0

Извините, но вы меня не поняли, потому что мой английский не очень хорош, посмотрите, что я хочу сделать. У меня есть база данных SQL-сервера в базе данных. У меня есть таблица, в которой я купил данные в vb в DataTable1 и показываю он в DataGridView1, затем я импортирую Excel-лист в vb в DataTable2 и покажу его в DataGridView2, чтобы добавить данные в таблицу SQL, но прежде чем добавить его, я не буду сравнивать его с DataTable1, но DataTable2 не совпадает с порядком столбцов с DataTable1, я не буду переупорядочивать DataTable2 (я знаю, что могу сравнить его, не изменяя его порядок, но я хочу, чтобы это стало проще для моей команды) –

0

Хорошо, вернемся к SetOrdinal, здесь я загружаю данные из базы данных, обратите внимание на позицию столбца ID в инструкции SELECT, а затем в Dataizer Visualizer. enter image description here

не отличается, то с помощью Excel enter image description here

+0

он работает, когда я пишу так, но когда я ставлю его внутри цикла, он не работает, я не знаю почему –

+0

Почему это не работает для вас это тайна, особенно если вы не видите свой обновленный код. –

+0

Я решил, что это тот же код, что и я изменил dt_Excel.Columns (i) .SetOrdinal (new_postion) на dt_Excel.Columns (0).SetOrdinal (new_postion) теперь его работы спасибо большое –

0

cODE IN IMAGE FORMAT вид, что мой код я хочу заказать справа налево Output of the image

я не буду зеленый один заказ, как над ним

0

Передразнивало пример заказывая право налево в соответствии с вашим комментарием

Module Module1 

    Sub Main() 
     Dim dt1 As New DataTable 
     dt1.Columns.Add(New DataColumn With {.ColumnName = "FirstName", .DataType = GetType(String)}) 
     dt1.Columns.Add(New DataColumn With {.ColumnName = "MiddleName", .DataType = GetType(String)}) 
     dt1.Columns.Add(New DataColumn With {.ColumnName = "LastName", .DataType = GetType(String)}) 

     dt1.Rows.Add(New Object() {"Karen", "", "Payne"}) 
     dt1.Rows.Add(New Object() {"Kevin", "S", "Gallagher"}) 
     dt1.Rows.Add(New Object() {"Mary", "D", "Jones"}) 


     Dim dt2 As New DataTable 
     dt2.Columns.Add(New DataColumn With {.ColumnName = "LastName", .DataType = GetType(String)}) 
     dt2.Columns.Add(New DataColumn With {.ColumnName = "FirstName", .DataType = GetType(String)}) 
     dt2.Columns.Add(New DataColumn With {.ColumnName = "MiddleName", .DataType = GetType(String)}) 

     dt2.Rows.Add(New Object() {"Payne", "Karen", ""}) 
     dt2.Rows.Add(New Object() {"Gallagher", "Kevin", "S"}) 
     dt2.Rows.Add(New Object() {"Jones", "Mary", "D"}) 


     Dim reverseList = dt1.Columns _ 
      .Cast(Of DataColumn) _ 
      .Select(
       Function(column, index) 
        Return New With {.Position = index, .Name = column.ColumnName} 
       End Function) _ 
      .OrderByDescending(Function(item) item.Position) _ 
      .ToList 

     For Each item In reverseList 
      If dt2.Columns.Contains(item.Name) Then 
       dt2.Columns(item.Name).SetOrdinal(item.Position) 
      End If 
     Next 
    End Sub 
End Module 

 Смежные вопросы

  • Нет связанных вопросов^_^