VB.Net Веб-приложение, как добавить столбец под столбцом в GridView

#asp.net #vb.net #web-applications

#asp.net #vb.net #веб-приложения

Вопрос:

Как мне добавить один столбец под другим столбцом, чтобы при выводе запроса у меня было два выходных значения в одной строке? В моем случае я хочу отобразить идентификатор Emp, а под этим столбцом я хочу отобразить идентификатор Cust, чтобы таблица GridView могла выглядеть следующим образом

Идентификатор Emp, идентификатор Rgst, номер строки, CD диска, идентификатор Auth Emp, оригинальный Prc, идентификатор Amt диска, Pct диска, идентификатор GL Acc

Идентификатор Cust

Другой вопрос в том, как я могу добавить столбец или заголовок в конце вывода «Origin Prc» как Total и суммировать все «Origin Prc» в Total, чтобы он мог выводить результат в том же столбце, что и «Origin Prc»? Таким образом, это может выглядеть так:

ОРИГИНАЛЬНЫЙ PRC

исходный вывод prc

ИТОГО

вывод — это сумма всех исходных данных prc

Можно ли это сделать с помощью текущего метода или мне нужно изменить свой подход к тому, как я выводю данные в ViewGrid?

Это мой текущий код:

 Protected Sub ExecuteButton_Click(sender As Object, e As EventArgs) Handles ExecuteButton.Click
    Dim StoreID As Integer
    Dim TransID As Integer
    Dim RgstID As Integer
    Dim dt As DataTable

    If Not Integer.TryParse(StoreIDTextbox.Text, StoreID) Then
        MsgBox("Invalid input. Please enter both Store ID and Transaction ID.")
        Exit Sub
    End If

    If Not Integer.TryParse(TransactionIDTextbox.Text, TransID) Then
        MsgBox("Invalid input. Please enter both Store ID and Transaction ID.")
        Exit Sub
    End If

    Sql.AddParam("@Str_ID", StoreID)
    Sql.AddParam("@Tran_ID", TransID)

    'Rgst_ID Validation
    If RegisterIDTextbox.Text.Length = 0 Then
        SQL.AddParam("@Rgst_ID", "")
    ElseIf RegisterIDTextbox.Text.Length > 0 Then
        RgstID = Integer.Parse(RegisterIDTextbox.Text)
        Sql.AddParam("@Rgst_ID", RgstID)
    End If

    Try
        dt = SQL.ExecQuery("Select H.Emp_ID, H.Cust_ID, H.Rgst_ID, D.TRAN_LN_NUM, D.DISC_CD, D.AUTH_EMP_ID, D.ORIG_PRC, D.DISC_AMT, D.DISC_PCT, D.GL_ACCT_ID 
                             From Transaction_Header H 
                             INNER Join LN_Detail L On (H.Str_ID = L.Str_ID And H.Rgst_ID = L.Rgst_ID And H.Tran_ID = L.Tran_ID)
                             INNER Join LN_Discount D ON (L.Str_ID = D.Str_ID And L.Rgst_ID = D.Rgst_ID And L.Tran_ID = D.Tran_ID And L.Tran_LN_Num = D.Tran_LN_Num)  
                             WHERE(H.Str_ID = @Str_ID)
                                And (H.Tran_ID = @Tran_ID)
                                And ((H.Rgst_ID = @Rgst_ID) Or (@Rgst_ID Is NULL Or @Rgst_ID = ''))")

    Catch ex As Exception
        MsgBox(ex.Message)
        Exit Sub
    End Try

    GridView2.DataSource = dt
    GridView2.DataBind()

    TimeLabel.Text = DateAndTime.Now
  

Просмотр сетки

 <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns ="False" CellPadding="4" ForeColor="#333333">
                        <AlternatingRowStyle BackColor="White" />
                        <Columns>
                            <asp:BoundField DataField="Emp_ID" HeaderText="Emp ID" /> 
                            <asp:BoundField DataField="Cust_ID" HeaderText="Cust ID" />
                            <asp:BoundField DataField="Rgst_ID" HeaderText="Rgst ID" />
                            <asp:BoundField DataField="TRAN_LN_NUM" HeaderText="Line #" />
                            <asp:BoundField DataField="DISC_CD" HeaderText="Disc CD" />
                            <asp:BoundField DataField="AUTH_EMP_ID" HeaderText="Auth Emp ID" />
                            <asp:BoundField DataField="ORIG_PRC" HeaderText="Orig Prc" />
                            <asp:BoundField DataField="Disc_Amt" HeaderText="Disc Amt" />
                            <asp:BoundField DataField="Disc_Pct" HeaderText="Disc Pct" />
                            <asp:BoundField DataField="GL_ACCT_ID" HeaderText="GL Acct ID" />
                        </Columns>
  

Ответ №1:

В вашей разметке GridView вместо этого используйте TemplateColumns , это даст вам необходимую гибкость, например

              <asp:TemplateColumn>
           <HeaderTemplate>
              <b> Tax </b>
           </HeaderTemplate>
           <ItemTemplate>
              <asp:Label
                   Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'
                   runat="server"/>
           </ItemTemplate>
           <EditItemTemplate>
              <asp:CheckBox
                   Text="Taxable" 
                   runat="server"/>
           </EditItemTemplate>
           <FooterTemplate>
              <asp:HyperLink id="HyperLink1"
                   Text="Microsoft"
                   NavigateUrl="http://www.microsoft.com"
                   runat="server"/>
           </FooterTemplate>
        </asp:TemplateColumn>
  

https://learn.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.templatecolumn?view=netframework-4.8