Vb.net DataGridView正在丢失设计时指定的初始状态

Vb.net DataGridView正在丢失设计时指定的初始状态,vb.net,Vb.net,当我试图更改DataGridView的数据源时,我失去了在设计时指定的列及其类型复选框、组合框的顺序 这就像更改数据源再次生成datagridview一样,为什么?如何在不丢失这些信息的情况下更改数据源 如果你知道,请给我帮助 提前谢谢 在表单加载时,我做了如下操作 Private Sub frmGrid_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Path as

当我试图更改DataGridView的数据源时,我失去了在设计时指定的列及其类型复选框、组合框的顺序

这就像更改数据源再次生成datagridview一样,为什么?如何在不丢失这些信息的情况下更改数据源

如果你知道,请给我帮助

提前谢谢

在表单加载时,我做了如下操作

Private Sub frmGrid_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Path as string
Path="C:\......Myfile.xml"

Dim oData  as dataset
oData = New DataSet
oData.ReadXml(Path)
oData.AcceptChanges() 

DataGridView1.DataSource = oData
DataGridView1.DataMember =  oData.Tables(0).TableName 
end sub
到目前为止,一切都很好,设计模式得以保留

然后在我的界面中,我有一个按钮将我的网格内容保存到一个excel文件中,它是一个xml,格式为excel

然后我想在一个按钮操作上导入它,所以我做了以下操作

Private Sub Button13_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click           
Dim MyDs As DataSet
MyDs = New DataSet
Dim InputFileStream As New System.IO.FileStream(Path, System.IO.FileMode.Open)
MyDs = ImportExcelXML(InputFileStream, True, True)
MyDs.ReadXml(Path)
MyDs.AcceptChanges()
DataGridView1.DataSource = MyDs
DataGridView1.DataMember = MyDs.Tables(0).TableName    
end sub

可能您已将GenerateColums属性设置为True

这意味着GridView将生成columnsname,并根据数据排序生成它们的数量

如果案例数据表中的数据源不同,则会出现不同的网格

如果数据源不同,您可以设计gridView的布局,但之后必须根据需要手动将数据绑定到列


RowDataBound事件。

您试图分配给DataGridView1的datatable。DataSource的结构与您在设计时定义DataGridView的方式不同。在将新数据表重新分配给数据源之前,在代码中放置一个断点,并查看结构中的不同之处。最有可能的情况是,您有更多或更少的数据列,或者这些列的顺序可能不同。它们甚至可能被命名为不同的。如果在设计时将DataGridViewColumn的DataProperty设置为特定名称,则名称需要精确


您只需在该断点处进行检查,看看有什么不同。

我找到了解决方案,您的提示帮助我找到了正确的方向来找到解决方案

我所做的是装表格

MaGrille.DataSource = oData
MaGrille.DataMember = oData.Tables(0).TableName
然后在按钮中单击我执行:

MaGrille.DataSource = MyDs
MaGrille.DataMember = MyDs.Tables(0).TableName
问题是网格正在重建,我丢失了格式、列顺序等

经过多次测试,我了解到它不起作用,因为数据表的名称不同!我不明白为什么,但这似乎是个错误。 我有以下价值观 oData.0=声明 MyDs.table0=Sheet1

所以我注意到,如果我通过声明而不是Sheet1重命名MyDs.Tables0,然后单击按钮,这次我不会丢失格式,也不会丢失订单

这激励我找到了解决方案:

在多次尝试之后,我意识到如果不在表单加载上执行

MaGrille.DataSource = oData
MaGrille.DataMember = oData.Tables(0).TableName
MaGrille.DataSource = oData.Tables(0)
然后单击按钮:

MaGrille.DataSource = MyDs
MaGrille.DataMember = MyDs.Tables(0).TableName
我有:

模板荷载

MaGrille.DataSource = oData
MaGrille.DataMember = oData.Tables(0).TableName
MaGrille.DataSource = oData.Tables(0)
然后点击按钮

MaGrille.DataSource = MyDs.Tables(0)
即使oData.table0.TableName与MyDs.table0.TableName不同,所有这些都可以正常工作

我现在找到了解决办法,但仍然不明白为什么如果有人得到解释,请让我知道


再次感谢所有

当您在Excel中打开导出的XML文件时,列的顺序是否正确,或者它们是否已从GridView中更改了顺序?AutoGenerateColumns我找不到此属性!我看到的唯一generate属性是generate members,是的,这是真的吗?你确定那房子的名字吗?