1

首先我会告诉你一些背景知识,我需要创建一个包含动态列的网格,列数将基于用户选择,在我的 DataTable 中,我在列名中添加了数字以保持它们的名称不同,然后我将它与我的绑定格维尤。

现在我需要重命名列 headerText 并从列标题中删除计数器编号,当我尝试使用以下方法循环我的 grid.columns 时,我的网格还有一个未绑定的 Image 类型的列:

foreach (DataGridViewTextBoxColumn dgc in grdDistProcessing.Columns)

它给了我错误 InvalidCastException:

无法将“System.Windows.Forms.DataGridViewImageColumn”类型的对象转换为“System.Windows.Forms.DataGridViewTextBoxColumn”类型。

我也使用了 DataColumn 但它给了我同样的错误,另一个线程说我们应该使用 DataControlField 但 VS 没有识别它,它是 ASP 的东西吗?还是我缺少参考?

请帮忙。

Rgds,

4

2 回答 2

1

如果您有可用的 var 关键字(我认为是 c#3 及更高版本)。

foreach (var dgc in grdDistProcessing.Columns)
{


 if(dgc is DataGridViewImageColumn)
{

   //do stuff with it.
   var tempDgc = (DataGridViewImageColumn)dgc; //cast it as needed.
   //use it

}


}
于 2012-12-12T13:00:20.020 回答
0

谢谢scartag,你的解决方案就像一个魅力,顺便说一句,我探索了这个问题的另一个解决方案,我可以使用一个普通的for循环。

        `for (int i = 0; i < grdDistProcessing.Columns.Count; i++)
        {
            MessageBox.Show(grdDistProcessing.Columns[i].HeaderText);
        }`
于 2012-12-12T13:27:20.837 回答