如何基于ASP.NET中的正值和负值将数据表列名称拆分为两列 [英] How to split the datatable column name into two columns based on positive values and negative values in ASP.NET

查看:74
本文介绍了如何基于ASP.NET中的正值和负值将数据表列名称拆分为两列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

---------------------------------------

Id |名称|信用|

---------------------------------------

1 | A | -2 |

2 | B | 1 |

3 | c | -9 |

4 | d | 4 |

---------------------------------------



以上数据表分为以下数据表

-------------------- -------------------------------

Id |名称| AdvCredit | AdvCredit |

---------------------------------------- -----------

1 | A | -2 | |

2 | B | | 1 |

3 | c | -9 | |

4 | d | | 4 |

---------------------------------------- ----------



我的尝试:



i尝试使用ViewState,但从视图状态到数据表值不转换但我只想在datatble split

解决方案

如果你有兴趣将一个数据表转换成另一个在客户端,请检查:

  //  源数据表 
DataTable dt = new DataTable();
dt.Columns.AddRange( new DataColumn []
{
new DataColumn( Id typeof int )),
new DataColumn( 名称 typeof string )),
new DataColumn( AdvCredit typeof int ))
});
dt.Rows.Add( new object [] { 1 A, - 2});
dt.Rows.Add( new object [] { 2 B 1 });
dt.Rows.Add( new object [] { 3 c, - 9});
dt.Rows.Add( new object [] { 4 d 4 });

// 基于源数据表创建目标数据表
DataTable dstdt = dt.Clone();
// 添加新列
dstdt.Columns.Add( new DataColumn( AdvCredit1 typeof int )));
// 允许空值!
dstdt.Columns [ 2 ]。AllowDBNull = true ;
dstdt.Columns [ 3 ]。AllowDBNull = true ;

// 条件不符合时的默认值
< span class =code-keyword> int
? defVal = null ;
// 将数据从源数据库复制到目标数据
dstdt = dt.AsEnumerable ()
。选择(x = > dstdt.LoadDataRow( new object []
{
x.Field< int>( Id),
x.Field< string>( 名称 ),
x.Field< int>( AdvCredit)< span class =code-keyword><
0 ?x.Field< int>( AdvCredit):defVal,
x.Field< int>( < span class =code-string> AdvCredit)> 0 ?x。字段< INT >( AdvCredit):defVal,
}, false ))
.CopyToDataTable();


假设您的数据来自某种形式的数据库,那就是这样做的地方。

  SELECT  ID,
CASE WHEN 信用< 0 THEN Credit ELSE NULL END
CASE WHEN 信用< 0 那么 NULL ELSE Credit END
FROM MyTable


---------------------------------------
Id | Name | Credit |
---------------------------------------
1 | A | -2 |
2 | B | 1 |
3 | c | -9 |
4 | d | 4 |
---------------------------------------

the above datatable split into below Datatable
---------------------------------------------------
Id | Name | AdvCredit | AdvCredit |
---------------------------------------------------
1 | A | -2 | |
2 | B | | 1 |
3 | c | -9 | |
4 | d | | 4 |
--------------------------------------------------

What I have tried:

i tried with ViewState but from view state to datatable values not converting but i want only in datatble split

解决方案

If you interested in "converting" one datatable into another on client side, check this:

//source datatable
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]
	{
		new DataColumn("Id", typeof(int)), 
		new DataColumn("Name", typeof(string)), 
		new DataColumn("AdvCredit", typeof(int))
	});
dt.Rows.Add(new object[]{1, "A", -2});
dt.Rows.Add(new object[]{2, "B", 1});
dt.Rows.Add(new object[]{3, "c", -9});
dt.Rows.Add(new object[]{4, "d", 4});

//create destination datatable based on source datatable
DataTable dstdt = dt.Clone();
//add new column
dstdt.Columns.Add(new DataColumn("AdvCredit1", typeof(int)));
//allow nulls!
dstdt.Columns[2].AllowDBNull = true;
dstdt.Columns[3].AllowDBNull = true;

//default value when condition does not meet
int? defVal = null;
//copy data from source to destination datatable
dstdt = dt.AsEnumerable()
	.Select(x=> dstdt.LoadDataRow(new object[]
	{
		x.Field<int>("Id"),
		x.Field<string>("Name"),
		x.Field<int>("AdvCredit") < 0 ? x.Field<int>("AdvCredit") : defVal,
		x.Field<int>("AdvCredit") > 0 ? x.Field<int>("AdvCredit") : defVal,
	}, false))
	.CopyToDataTable();


Assuming your data comes from a database of some form, that's the place to do this.

SELECT ID, 
       CASE WHEN Credit < 0 THEN Credit ELSE NULL END,
       CASE WHEN Credit < 0 THEN NULL ELSE Credit END
FROM MyTable


这篇关于如何基于ASP.NET中的正值和负值将数据表列名称拆分为两列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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