2016-12-20 9 views
1

Я сделал код, чтобы показать записи, используя AspxGridView. Теперь я хочу показать сумму (Column_Name), count (Column_Name) для Footer и Grouping.Как выполнить резюме нижнего колонтитула и резюме группы в AspxGridView с использованием динамической привязки?

Это мой код:

<dx:ASPxGridView ID="ASPxGridView1" runat="server" > 
        <SettingsPager PageSize="50"> 
        </SettingsPager> 
        <Settings ShowFilterRow="True" ShowGroupPanel="True" ShowFooter="True" ShowGroupFooter="VisibleIfExpanded" /> 
        <SettingsCommandButton> 
         <ShowAdaptiveDetailButton ButtonType="Image"></ShowAdaptiveDetailButton> 

         <HideAdaptiveDetailButton ButtonType="Image"></HideAdaptiveDetailButton> 
        </SettingsCommandButton> 
        <SettingsDataSecurity AllowDelete="False" AllowEdit="False" AllowInsert="False" /> 
        <SettingsSearchPanel Visible="True" /> 
       </dx:ASPxGridView> 

C# код:

protected void Page_Load(object sender, EventArgs e) 
{ 
if (IsPostBack) 
     { 
      ASPxGridView1.Visible = true; 
      string cs = ConfigurationManager.ConnectionStrings["HQMatajerConnectionString"].ConnectionString; 
      whereQuery = getWhereQuery(); 
      using (SqlConnection con = new SqlConnection(cs)) 
      { 
       string querysss = "select "+txtSelectedColumn.Text+ @" 
          FROM  [HQMatajer].[dbo].[Transaction] as transactions 
          RIGHT JOIN [HQMatajer].[dbo].[TransactionEntry] as transactionsEntry 
          ON transactions.TransactionNumber=transactionsEntry.TransactionNumber 
          INNER JOIN [HQMatajer].[dbo].[Item] as items 
          ON transactionsEntry.ItemID=items.ID 
          INNER JOIN [HQMatajer].[dbo].[Supplier] as suppliers 
          ON items.SupplierID=suppliers.ID 
          LEFT JOIN [HQMatajer].[dbo].[Department] as departments 
          ON departments.ID=items.DepartmentID 
          LEFT JOIN [HQMatajer].[dbo].[Category] as categories 
          ON categories.ID=items.CategoryID 
          where " + txtQuery.Text; 

       SqlCommand cmd = new SqlCommand(); 

       cmd.Connection = con; 
       cmd.CommandText = querysss; 
       con.Open(); 

       SqlDataAdapter sda = new SqlDataAdapter(cmd); 

       sda.Fill(ds); 

       ASPxGridView1.AutoGenerateColumns = true; 
       ASPxGridView1.DataSource = ds; 
       ASPxGridView1.DataBind(); 
      } 
     } 

Вы можете заметить, что мое заявление SQL запроса. В этом пользователе только решить, какой столбец они хотят отображать. Если они выбирают Price column_name в select statement. Он должен отображать сумму (цену) в нижнем колонтитуле для всех записей и для группировки, если пользователь делает группировку

+0

Возможно, начните использовать LINQ to Entities? И Entity Framework. –

ответ

0

Вы можете добавить итоговый элемент в код C# и изменить имя поля в каждой обратной передаче. например для резюме колонтитула

ASPxSummaryItem gs = new ASPxSummaryItem(); 
gs.FieldName = txtSelectedColumn.Text; 
gs.SummaryType = DevExpress.Data.SummaryItemType.Sum; 
this.ASPxGridView1.TotalSummary.Add(gs); 

Если имя поля не меняется, вы можете удалить старые сводки и добавить новую каждый раз, когда в нужной колонке. Вы также можете сделать то же самое для каждой сводки групп. Вы также можете проверить их: https://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridView_GroupSummarytopic и https://documentation.devexpress.com/#AspNet/DevExpressWebASPxGridView_TotalSummarytopic