Изменить DefaultCellStyle при использовании DataTable в Datagridview - PullRequest
0 голосов
/ 19 ноября 2018

* Используя Powershell studio, но я мог бы работать с ответом на C #, поскольку он в основном такой же, за исключением синтаксиса.

Вот контекст:

Я ранее использовал:

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

Для заполнения DataGridView, но впоследствии я заметил, что не могу экспортировать DataGridView в CSV, если он не использует «DataTable» в качестве источника данных.

Так что теперь я создаю 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 голосов
/ 19 ноября 2018

Я получил его, работая с событием RowPrePaint, вот так:

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


}

Все благодаря jrv в Technet:

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

...