Winforms 如何设置新添加的DataGridViewButton列的ColumnIndex

Winforms 如何设置新添加的DataGridViewButton列的ColumnIndex,winforms,datagridview,Winforms,Datagridview,我对DataGridView控件中的按钮单元格有一个非常恼人的问题。我在运行时将网格绑定到数据集。网格中的某些行将链接到pdf文档。我创建一个button列并将其添加到网格中,然后通过行循环,并根据某列的值在button列中设置单元格的文本。当我逐步浏览代码时,我可以看到按钮列的ColumnIndex是10。但是,当窗体出现时,我想要的行的按钮文本值为空。 单击按钮时,我会在CellContentClick事件中检查ColumnIndex是否为10(即按钮列),它会告诉我ColumnIndex为

我对DataGridView控件中的按钮单元格有一个非常恼人的问题。我在运行时将网格绑定到数据集。网格中的某些行将链接到pdf文档。我创建一个button列并将其添加到网格中,然后通过行循环,并根据某列的值在button列中设置单元格的文本。当我逐步浏览代码时,我可以看到按钮列的ColumnIndex是10。但是,当窗体出现时,我想要的行的按钮文本值为空。 单击按钮时,我会在CellContentClick事件中检查ColumnIndex是否为10(即按钮列),它会告诉我ColumnIndex为0,即使它是最后一列。然后,当我重新加载网格时,我再次调用BindHistoryGrid方法,该方法会删除列(如果存在),然后重新添加它。这一次,它将正确设置按钮文本。有没有什么奇怪的行为我看不出来?第一次添加按钮ColumnIndex时,如何将其设置为10(即使它告诉我它是10)


我调用了我的bindGrid()方法,从表单的构造函数中的InitializeComponent()后面的两个位置调用,也从表单1\u load()调用。它对我有用


希望这也能对你有所帮助。

我在这里没有收到任何回复,所以我在另一个论坛上发了帖子。我最终得到了某种程度的回答,但整个问题仍然相当模糊。我得到的答案是为了保存资源,网格并不总是刷新自己。例如,如果表单的选项卡控件有两个选项卡,请在第一个选项卡上放置网格,并在表单加载中绑定后设置列属性。这会奏效的。但是,将网格放置在第二个选项卡上时,使用相同的绑定将不起作用:


我还没有发现它是如何或何时决定保留资源的,是否有办法绕过这种行为,这种行为是否在任何地方都有记录,等等。如果有人能对它有更多的了解,我洗耳恭听。

我也有同样的问题。我最初在一个单独的表单上有一个DataGridView,它与button列完美配合——我在设置数据源后将其添加到代码中。然而,当我决定将网格移动到另一个带有选项卡控件的表单上时(恰好在选项卡(2)页面上),按钮列索引一直恢复为零。当然,它在网格上看起来非常好,也就是说,在正确的物理位置,如果我在调试模式下遍历代码,索引没有改变,但是当我运行程序时,它确实改变了!非常令人沮丧

在设置数据源之前,我通过将选项卡页面设置为网格所在的页面来解决这个问题

我的简单过程如下(我使用VB10):

'我在DataReader中执行Sql命令,然后填充DataTable,然后将其分配给网格

MyGrid.DataSource = MyDataTable
'现在添加按钮列

Dim btnCol as New DatGridViewButtonColumn
MyGrid.Columns.Add(btnCol) 

有人对此有什么看法或想法吗??
MyGrid.DataSource = MyDataTable
Dim btnCol as New DatGridViewButtonColumn
MyGrid.Columns.Add(btnCol)