如何更改数据网格中的行 [英] How to change the rows in a datagrid
问题描述
大家好。
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 aCASE
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 ;
In addition to solution#1 by Richard Deeming[^], you can add computed/expression column to yourDataTable
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屋!