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