在Datagridview中使用DataTable时更改DefaultCellStyle

时间:2018-11-19 15:38:47

标签: c# powershell datagridview datatable datagridviewcellstyle

*使用Powershell Studio,但我可以使用C#答案,因为除语法外,它几乎相同。

这里是上下文:

我以前使用过:

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

要填充DataGridView,但后来我注意到,如果它不使用“ DataTable”作为数据源,则无法将DataGridView导出为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,但仍能正确设置行的样式?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我可以像这样使用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