ADI@345 Ответов: 1

Как подсчитать каждую запись из базы данных и отобразить значение подсчета с каждой записью в gridview


Я пытаюсь подсчитать количество записей из базы данных и отобразить это значение подсчета с каждой записью gridview.

Для Бывших:-
запись базы данных
1 класс 8 A01 Adi 2017 15.03.2017 11:30:46 AM P
2 класс 8 A02 Adi 2017 15.04.2017 11:30:46 AM P
3 класс 8 A03 Ram 2017 15.03.2017 11:30:46 AM A

И отображение в gridview:-

КЛАСС НАЗВАНИЕ РУЛОНА ДАТА ПАРТИИ ПРИСУТСТВУЮЩИЕ / ОТСУТСТВУЮЩИЕ ПОСЕЩЕННЫЕ ЛЕКЦИИ
CLASS8 A01 Adi 2017 15.03.2017 флажок 2
CLASS8 A02 Ram 2017 15.03.2017 флажок 0




Пожалуйста, ответьте мне поскорее..
Я не смог отобразить значение посещенной лекции..

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

<pre>
    void gvattendcount()
    {
      using (SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
        {
            foreach (GridViewRow row in GVattend.Rows)
            {
               
                string rollno = (((Label)row.FindControl("lblroll")).Text);
                string attendlecture = (((Label)row.FindControl("lblattend")).Text);

                string query = "SELECT COUNT(*) as attendlecture FROM class8_attend where  rollno ='" + rollno + "' AND present ='p'";
                using (SqlCommand cmd = new SqlCommand(query, cnn))
                {
                    cnn.Open();
                    Int32 count = (Int32)cmd.ExecuteScalar();
                    attendlecture = count.ToString();
                    cnn.Close();
                }
                }
            }
        }

Graeme_Grant

Основные данные для GridView поступают из БД? Не было бы гораздо проще сделать один звонок в БД и позволить ей сделать всю тяжелую работу за вас, а не 1, чтобы получить основные данные, а затем ударить по БД несколько раз (по одному на строку), чтобы получить консолидированные подсчеты? Тогда приложение будет гораздо более отзывчивым.

Кроме того, вы не должны объединять строки SQL-запросов.

Karthik_Mahalingam

вы принимаете отчетливые меры?

1 Ответов

Рейтинг:
1

pt1401

То, что вы дали нам в качестве желаемого результата, неисправно.
Линия

CLASS8 A01 Adi 2017 03/15/2017 Checkbox 2

говорит, что было 2 случая присутствия A01/Adi. Но там был только один, другой был рулон А02.
Кроме того, столбцы batch_date не совпадают - ваш GridView имеет одну строку для двух разных batch_dates.

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

Предположим, у вас есть эта таблица:-
USE [Penvro]
GO

/****** Object:  Table [dbo].[Attendance]    Script Date: 15/03/2017 08:03:19 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Attendance](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[class] [int] NOT NULL,
	[roll] [varchar](50) NOT NULL,
	[name] [varchar](50) NOT NULL,
	[batch_date] [datetime] NOT NULL,
	[present] [char](1) NOT NULL,
 CONSTRAINT [PK_Attendance] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

и вы заполняете его этими данными:-
INSERT INTO Attendance (class, roll, name, batch_date, present) VALUES
(8, 'A01', 'Adi', '15-Mar-2017 11:30:46', 'P'),
(8, 'A01', 'Adi', '15-Mar-2017 11:30:46', 'P'),
(8, 'A03', 'Ram', '15-Mar-2017 11:30:46', 'A')

Тогда этот запрос вернет вам нужные результаты
SELECT class, roll, name, batch_date, CASE WHEN present='P' THEN 1 ELSE 0 END AS present_absent, count(*) AS total
FROM Attendance a
GROUP BY class, roll, name, batch_date, a.present

class   roll  name   batch_date              present_absent total
------- ----- ------ ----------------------- -------------- ------
8       A01   Adi    2017-03-15 00:00:00.000 1              2
8       A03   Ram    2017-03-15 00:00:00.000 0              1


pt1401

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