Murali-Krishna-battu Ответов: 2

Как разделить имя столбца datatable на два столбца на основе положительных значений и отрицательных значений в ASP.NET


---------------------------------------
Id | Имя | Кредит |
---------------------------------------
1 | А | -2 |
2 | B | 1 |
3 | c | -9 |
4 | d | 4 |
---------------------------------------

вышеуказанный объект DataTable объект DataTable в Сплит ниже
---------------------------------------------------
Id | Name | AdvCredit | AdvCredit |
---------------------------------------------------
1 | А | -2 | |
2 | B | / 1 |
3 | c | -9 | |
4 | d | | 4 |
--------------------------------------------------

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

я пробовал с ViewState но из состояния просмотра в datatable значения не конвертируются но я хочу только в datatble split

2 Ответов

Рейтинг:
5

OriginalGriff

Предполагая, что ваши данные поступают из базы данных какой-то формы, это самое подходящее место для этого.

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


Murali-Krishna-battu

Спасибо OriginalGiff но мне нужно в c#

Рейтинг:
18

Maciej Los

Если вы заинтересованы в "преобразовании" одного datatable в другой на стороне клиента, проверьте это:

//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();


Murali-Krishna-battu

Спасибо Мацей Лос

Maciej Los

Всегда пожалуйста.