2016-02-02 52 views
1

从Excel导入数据到VisualBasic中,我使用下面的代码重新排序的列:如何在vb.net中重新排列DataTable中的列?

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

你正在尝试分配数据表到DataGridView后,将无法正常工作,至少不能以恰当的方式。

设置位置之前分配的DataTable到DataGridView.DataSource将是最好的,但如果不能再使用的DisplayIndex例如DataGridView1.Columns(x).DisplayIndex = y

其中x是列索引改变,y是什么,我们也可能发生变化。

如果碰巧你在IDE中创建DataGridView列,然后是的DisplayIndex去的唯一途径。

+0

我不想在DataGridView中订购它,我需要订购DataTable,因为我不希望与另一个DataTable相比较,我不会轻易比较 –

+0

您好史蒂夫,我会回复一个不同的建议如果你已经指出了新的要求(因为它不是最初的问题),但即使如此,比较顺序位置并不重要,因为你可以使用(不知道你是如何比较,所以这可能无法正常工作,因此更多的细节更好)。 (0).Field(Of String)(“FirstName”))这个概念是通过Dim的结果得到点的。 ,True,False) –

+0

对不起,但你不理解我,因为我的英语不好,看看我想做什么我有数据库中的数据库SQL服务器我有表我在DataTable1中向数据表中购买了数据并显示它在DataGridView1中,然后我将Excel表导入到DataTable2中的VB中,并将其显示在DataGridView2中,以在SQL表中添加数据,但在添加之前,我不会将其与DataTable1进行比较,但DataTable2与DataTable1的列顺序不同,我不想重新排序DataTable2(我知道我可以比较它没有重新排序,但我不会让我的团队很容易) –

0

好吧,让我们回到SetOrdinal,在这里我从数据库加载数据,请注意在SELECT语句中的ID列的位置,然后在DataSet可视化工具。 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