drvfn Ответов: 2

Как изменить строки в сетке данных


Привет всем

у меня есть datagrid (из sql) с datatable, как в этом примере :

имя фамилия класс

Рик летних 3
Пэм Уинтер 5
Эрик Фрост 8

мне нужно изменить в этой datagrid класс столбца на другое значение

если класс похож на 3 то он покажет а
если класс 5, как он покажет б
если класс 8, как он будет показывать с

я сделал это с помощью приведенного ниже решения, но это занимает много времени, когда у меня много строк, около 8000.

может ли кто-нибудь показать мне лучшее решение?

заранее спасибо

Что я уже пробовал:

DataTable dt = Consumptionall(); //from sql connection
 dtAll = dt.Clone();
 dtAll.Columns["class"].DataType = typeof(string);
 foreach (DataRow drdc in dt.Rows)
 {
     dtAll.ImportRow(drdc);
     allconversion();
 }


private void allconversion()
       {
               for (int i = 0; i < dtAll.Rows.Count; i++)
               {
                   if (dtAll.Rows[i]["class"].ToString() == "3")
                   { dtAll.Rows[i]["class"] = "a"; }
                   if (dtAll.Rows[i]["class"].ToString() == "5")
                   { dtAll.Rows[i]["class"] = "b"; }
                   if (dtAll.Rows[i]["class"].ToString() == "8")
                   { dtAll.Rows[i]["class"] = "c"; }

2 Ответов

Рейтинг:
4

Maciej Los

В дополнение к решению№1 по Ричард Диминг[^], вы можете добавить столбец вычисленных/выражений в свой DataTable объект. Прочесть:
Создание Столбцов Выражений | Microsoft Docs[^]
объект DataColumn.Свойство Выражения (System.Data)[^]

Добиться этого довольно просто:

Dim dc AS DataColumn = New DataColumn("ClassName", Type.GetTYpe("System.String"))
dc.Expression = "IIF(class=3, 'a', IIF(class=5, 'b', IIF(class=8, 'c', 'uknknown')))"
dtAll.Columns.Add(dc)


Вот и все!


RickZeeland

5d !

Maciej Los

Спасибо тебе, Рик!

Рейтинг:
16

Richard Deeming

Использовать CASE оператор в вашем SQL-запросе:

SELECT
    name,
    surname,
    CASE class
        WHEN 3 THEN 'a'
        WHEN 5 THEN 'b'
        WHEN 8 THEN 'c'
        ELSE Convert(varchar(10), class)
    END As class
FROM
    YourTable
;

CASE (Transact-SQL) | Microsoft Docs[^]


Maciej Los

5ed!