当我尝试更改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
答案 0 :(得分:0)
你可以将GenerateColums属性设置为“True”
这意味着GridView将生成数据列的列(名称和数量)。
如果数据源(在您的案例数据表中)不同,它将出现不同的网格。
如果数据源不同,您可以设计gridView的布局,但之后您必须根据需要手动将数据绑定到列。您可以这样做到
RowDataBound事件。
答案 1 :(得分:0)
您尝试分配给DataGridView1.DataSource的数据表的结构与您在设计时定义DataGridView的方式不同。在将新DataTable重新分配给DataSource之前,在代码中设置一个断点,并查看结构中的不同之处。您可能有更多或更少的DataColumns,或者列可能有不同的顺序。他们甚至可能命名不同。如果在设计时将DataGridViewColumn的DataProperty设置为特定名称,那么名称必须精确。
你只需要在那个断点检查它,看看有什么不同。
答案 2 :(得分:0)
我找到了解决方案,您的提示帮助我找到正确的方向找到解决方案!
我在做的是表单加载
MaGrille.DataSource = oData
MaGrille.DataMember = oData.Tables(0).TableName
然后在按钮中单击我执行:
MaGrille.DataSource = MyDs
MaGrille.DataMember = MyDs.Tables(0).TableName
问题是网格正在重建,我放松了格式,列顺序等。
经过多次测试,我明白它不起作用,因为数据表的名称是不同的!我不明白为什么,但它似乎是错误。 我有以下价值观 oData.Tables(0)=“DECLARATION” MyDs.Tables(0)=“Sheet1”
所以我注意到如果我通过“DECLARATION”而不是“Sheet1”重命名MyDs.Tables(0),并且我点击按钮,这次我没有松散格式,也没有订单......
这激发了我找到 SOLUTION :
经过多次尝试,我意识到如果不是在表单上加载
MaGrille.DataSource = oData
MaGrille.DataMember = oData.Tables(0).TableName
并点击按钮:
MaGrille.DataSource = MyDs
MaGrille.DataMember = MyDs.Tables(0).TableName
我做:
表单加载
MaGrille.DataSource = oData.Tables(0)
并点击按钮
MaGrille.DataSource = MyDs.Tables(0)
即使oData.Tables(0).TableName与MyDs.Tables(0)不同,所有工作正常.TableName !!
我找到了解决方案现在,但仍然无法理解为什么如果有人得到解释,请告诉我。
再次感谢