在Datagridview中使用DataTable时更改DefaultCellStyle



*使用Powershell studio,但我可以使用C#答案,因为除了语法之外,它基本上是一样的。

以下是上下文:

我以前使用过:

$datagridviewInfo.Rows.Add("123", "456")

为了填充DataGridView,但后来我注意到,如果DataGridView不使用"DataTable"作为DataSource,我就无法将其导出为CSV。

所以现在我正在创建一个DataTable,并将我的行添加到这个对象中。我现在可以成功导出到CSV。然而,我无法像以前那样设计我的细胞。如果我这样做是为了测试:

$button1_Click={
$RowNomPoste = $datagridviewInfo.Rows.Add("Poste", "$poste est inaccessible.")
$datagridviewInfo.Rows.Item($RowNomPoste).DefaultCellStyle.BackColor = "Red"
}

它起作用了,并给了我红色突出显示的行。然而,该方法没有使用DataTable,所以它不好,因为以后我无法导出到CSV。

现在,如果我尝试这个:

$button2_Click={
$tableInfoPoste = New-Object system.Data.DataTable "TableInfoPoste"
$tableInfoPoste.Columns.Add("Propriété")
$tableInfoPoste.Columns.Add("Valeur")
$datagridviewInfo.DataSource = $tableInfoPoste
$RowNomPoste = $tableInfoPoste.Rows.Add("Poste", "$poste est inaccessible.")
$tableInfoPoste.Rows.Item($RowNomPoste).DefaultCellStyle.BackColor = "Red"
}

它添加了行,但不允许我更改它的DefaultCellStyle。它抛出错误:

Cannont convert argument «index» («System.Data.DataRow»)  «get_Item» to type «System.Int32»: «
ERROR: Cannot convert the value «System.Data.DataRow» of type «System.Data.DataRow» to type «System.Int32».»»

为什么当使用直接向DataGridView添加行的第一种方法时它有效,而当使用DataTable时却无效?如何在使用DataTable的同时仍然正确地设置行的样式?

非常感谢。

我用RowPrePaint事件处理了它,如下所示:

$datagridviewInfo_RowPrePaint=[System.Windows.Forms.DataGridViewRowPrePaintEventHandler]{
if (($datagridviewInfo.Rows[$_.RowIndex].Cells[1].Value) -like "*inaccessible*")
{
$datagridviewInfo.Rows[$_.RowIndex].DefaultCellStyle.BackColor = 'red'
}

}

感谢Technet的jrv:

https://social.technet.microsoft.com/Forums/windowsserver/en-US/6cb6a5be-08bd-47d4-8783-66d57fc26ead/change-defaultcellstyle-when-using-a-datatable-in-datagridview?forum=winserverpowershell

相关内容

  • 没有找到相关文章

最新更新