如何更改数据网格中的行 [英] How to change the rows in a datagrid

查看:82
本文介绍了如何更改数据网格中的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好。



i有一个数据网格(来自sql),数据包如下例所示:



姓氏班级



瑞克夏天3

pam冬天5

erik frost 8



i需要在此datagrid中将列类更改为其他值



如果类是3,则会显示

如果等级为5,它将显示b

如果等级为8则显示c



i它有下面的解决方案,但是当我有很多行,大约8000时需要花费很多时间。



有谁可以向我展示更好的解决方案?



提前感谢



我尝试过:



 DataTable dt = Consumptionall(); //来自sql connection 
dtAll = dt.Clone();
dtAll.Columns [class]。DataType = typeof(string);
foreach(dt.Rows中的DataRow drdc)
{
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;在$ SQL查询中使用 CASE 语句:

  SELECT  
name,
surname,
CASE class
WHEN 3 那么 ' a'
WHEN 5 那么 ' b'
WHEN 8 那么 ' c'
ELSE 转换 varchar (<跨度class =code-digit> 10 ),class)
END As class
FROM
YourTable
;



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


除了#a href =https://www.codeproject.com/script/Membership/View.aspx解决方案#1之外?mid = 34187> Richard Deeming [ ^ ],您可以将计算/表达式列添加到 DataTable 对象。请阅读:

创建表达式列| Microsoft Docs [ ^ ]

DataColumn.Expression属性(System.Data) [ ^ ]



这很简单实现这个目标:

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





这就是全部!


Hello to all

i have a datagrid (from sql) with a datatable like this example :

name surname class

rick summer 3
pam Winter 5
erik frost 8

i need to change in this datagrid the column class to other value

if class is like 3 it will show a
if class is like 5 it will show b
if class is like 8 it will show c

i did it with the solution below, but it takes a lot of time when i have a lot rows, around 8000.

can anyone show me a better solution?

thanks in advance

What I have tried:

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"; }

解决方案

Use a CASE statement in your SQL query:

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[^]


In addition to solution#1 by Richard Deeming[^], you can add computed/expression column to your DataTable object. Please, read:
Creating Expression Columns | Microsoft Docs[^]
DataColumn.Expression Property (System.Data)[^]

It's quite simple to achieve that:

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)



That's all!


这篇关于如何更改数据网格中的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆