*使用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