Member 12245539 Ответов: 1

Как подсчитать строковые значения в devexpress gridcontrol C# winform


Hello everyone,
Could i ask a question that within gridcontrol how cell values can be counted. 

My data look like 
rno.      Emp code. - d1. -  d2. -  d3. -  d4. -    d5
1.         101        P      P       A      A        P
2.         102        A      A       A      A        P       
3.         103.       P      A       P      A        P
Now I want count onpy P value in the end of column and also for A. 

Value should be like this.....
rno.      Emp code. - d1. -  d2. -  d3. -  d4. -    d5       total(p)  total (A)
1.         101        P      P       A      A        P       3           2
2.         102        A      A       A      A        P       1           4     
3.         103.       P      A       P      A        P       3           2

Please any one help.....

What I have tried:

..................................................................................

1 Ответов

Рейтинг:
9

Maciej Los

Предположим, что gridcontrol привязан к источнику данных, например DataTable, вы можете использовать Linq для получения ожидаемого результата:

DataTable dt = new DataTable();

dt.Columns.Add(new DataColumn("rno", typeof(int)));
dt.Columns.Add(new DataColumn("Emp code", typeof(int)));
dt.Columns.Add(new DataColumn("d1", typeof(string)));
dt.Columns.Add(new DataColumn("d2", typeof(string)));
dt.Columns.Add(new DataColumn("d3", typeof(string)));
dt.Columns.Add(new DataColumn("d4", typeof(string)));
dt.Columns.Add(new DataColumn("d5", typeof(string)));

dt.Rows.Add(new object[]{1, 101, "P", "P", "A", "A", "P"});
dt.Rows.Add(new object[]{2, 102, "A", "A", "A", "A", "P"});
dt.Rows.Add(new object[]{3, 103, "P", "A", "P", "A", "P"});


var resultset = dt.AsEnumerable()
	.Select(r => new
	{
		rno = r.Field<int>("rno"),
		EmpCode = r.Field<int>("Emp code"),
		d1 = r.Field<string>("d1"),
		d2 = r.Field<string>("d2"),
		d3 = r.Field<string>("d3"),
		d4 = r.Field<string>("d4"),
		d5 = r.Field<string>("d5"),
		TotalP = new List<string>(){r.Field<string>("d1"), r.Field<string>("d2"), r.Field<string>("d3"), r.Field<string>("d4"), r.Field<string>("d5")}
				.Count(x=>(string)x=="P"),
		TotalA = new List<string>(){r.Field<string>("d1"), r.Field<string>("d2"), r.Field<string>("d3"), r.Field<string>("d4"), r.Field<string>("d5")}
				.Count(x=>(string)x=="A")
	});



Наконец, вы можете преобразовать запрос linq в объект DataTable: Создание DataTable из запроса (LINQ to DataSet) | Microsoft Docs[^]

Удачи вам!


Member 12245539

но мой gridcontrol связан с ado.net.....

Maciej Los

Ado.net это общее название технологии доступа к данным из Microsoft .NET Framework, которая обеспечивает связь между реляционными и нереляционными системами через общий набор компонентов... Таким образом, вы, вероятно, используете DataView, DataTable, DataSet и т. д. для извлечения данных из базы данных.

Member 12245539

Спасибо


5 звезд

Maciej Los

Всегда пожалуйста. Спасибо,что проголосовали.

Member 12245539

Теперь он работает нормально.
Но если вы не возражаете, то я хотел бы знать, как можно очистить все строки после получения результата...

Я имею в виду, что мне нужен четкий "результирующий набор", чтобы данные не повторялись..

Maciej Los

Вы должны повторно привязать данные к gridcontrol.