как я могу достичь этого формата Excel в asp.net С # 3.5

Отчет Abc - Пример

Формат Excel 2007 (я должен получить этот формат ниже)

Job Number : 123________         Job Date : ___________    Destination : ________

_________________________________________________________________________________

Voucher No.    |   Voucher Date |  Expence |  Income 
_________________________________________________________________________________
 
 100           |  21/May/2021   |  100     |  50
 101           |  20/may/2020   |  200     |  100
_________________________________________________________________________________

Gross Profit : -150       Total |  300     |  150

_________________________________________________________________________________
_________________________________________________________________________________ 


Job Number : 124________         Job Date : ___________    Destination : ________

_________________________________________________________________________________

Voucher No.    |   Voucher Date |  Expence |  Income 
_________________________________________________________________________________
 
 105           |  21/May/2021   |  100     |  500
 109           |  20/may/2020   |  500     |  500
_________________________________________________________________________________

Gross Profit : 400       Total |  600     |  1000

Этот номер вакансии и номер ваучера отображаются многократно (N) раз ...... Это моя таблица данных, полученная из базы данных ... (исходные данные)

JobNo   |  JobDate   |  Destination | VoucherNo    |   Voucher Date   |  Expence  |  Income 
--------------------------------------------------------------------------------------------
123     |                 India     |  100         |     21/May/2021  |  100      |  50 
123     |                 India     |  101         |     20/may/2020  |  200      |  100   
124     |                 Canada    |  105         |     21/May/2021  |  100      |  500 
124     |                 Canada    |  109         |     20/may/2020  |  500      |  500   
---------------------------------------------------------------------------------------------

Я пробовал это ... Я могу изменить дату ... как показано ниже

JobNo   |  JobDate   |  Destination | VoucherNo    |   Voucher Date   |  Expence  |  Income 
--------------------------------------------------------------------------------------------
123     |                 India     |  100         |     21/May/2021  |  100      |  50 
123     |                 India     |  101         |     20/may/2020  |  200      |  100  
------------------------------------------------------------------------------------------------
Gross Profit: -150                                                       300         600
---------------------------------------------------------------------------------------------- 
124     |                  Canada   |  105         |     21/May/2021  |  100      |  500 
124     |                  Canada   |  109         |     20/may/2020  |  500      |  500   
---------------------------------------------------------------------------------------------
Gross Profit: 400                                                     |  600      |  1000
---------------------------------------------------------------------------------------------

Я экспортирую данные в следующем формате .......

Отчет ABC от даты ABC до даты XYZ

JobNo   |  JobDate   |  Destination | VoucherNo    |   Voucher Date   |  Expence  |  Income 
--------------------------------------------------------------------------------------------
123     |                 India     |  100         |     21/May/2021  |  100      |  50 
        |                           |  101         |     20/may/2020  |  200      |  100  
------------------------------------------------------------------------------------------------
Gross Profit: -150                                                       300         600
---------------------------------------------------------------------------------------------- 
124     |                  Canada   |  105         |     21/May/2021  |  100      |  500 
        |                           |  109         |     20/may/2020  |  500      |  500   
---------------------------------------------------------------------------------------------
Gross Profit: 400                                                     |  600      |  1000
---------------------------------------------------------------------------------------------

Но я хочу добиться этого ..

Job Number : 123________         Job Date : ___________    Destination : ________

_________________________________________________________________________________

Voucher No.    |   Voucher Date |  Expence |  Income 
_________________________________________________________________________________
 
 100           |  21/May/2021   |  100     |  50
 101           |  20/may/2020   |  200     |  100
_________________________________________________________________________________

Gross Profit : -150       Total |  300     |  150

_________________________________________________________________________________
_________________________________________________________________________________ 


Job Number : 124________         Job Date : ___________    Destination : ________

_________________________________________________________________________________

Voucher No.    |   Voucher Date |  Expence |  Income 
_________________________________________________________________________________
 
 105           |  21/May/2021   |  100     |  500
 109           |  20/may/2020   |  500     |  500
_________________________________________________________________________________

Gross Profit : 400       Total |  600     |  1000

Этот номер работы и номер ваучера показывает несколько (N) раз ......

Я получаю данные с сервера Sql как базу данных ..

Я использую фреймворк asp.net 3.5 ... пожалуйста, не предлагайте никаких ddl..и не имею права добавлять какие-либо файлы ddl на стороне клиента ....

Как я могу этого добиться ... Любая помощь будет принята с благодарностью .... Спасибо !!


person Akhilesh Singh    schedule 21.05.2021    source источник


Ответы (1)


Хорошо, это одна из тех проблем, для решения которых БОЛЬШЕ думать, а не делать!

Сначала у вас есть данные, которые на самом деле НЕ являются столбцами, а затем внутри них вам нужна сетка данных.

Итак, нам просто нужно сгруппировать наши данные по JobNo.

И так как это НЕ столбцы, а какие-то текстовые данные, то управление повторителем - это работа для этой задачи.

Теперь, внутри репитера, нам нужна такая таблица / сетка. Итак, внутри элемента управления повторителем мы переходим к сетке.

Итак, наша разметка будет выглядеть так:

   <div style="width:38%">
        <br />
        <asp:Repeater ID="Repeater1" runat="server">
            <ItemTemplate>
            <asp:Label runat="server" Text="Job Number:"></asp:Label>
                <asp:TextBox ID="txtJobNum" runat="server" Text='<%# Eval("JobNo") %>'></asp:TextBox>
                <asp:Label ID="Label1" runat="server" Text="Job Date; _____________" Style="margin-left:20px"></asp:Label>
                <asp:Label ID="Label2" runat="server" Text="Job Destination _____________"  Style="margin-left:20px"></asp:Label>
                <br />
                <br />
                <asp:GridView ID="GridView1" runat="server" ShowFooter="true"></asp:GridView>
                <hr />
                <br />
            </ItemTemplate>
        </asp:Repeater>
        <br />
    </div>

Итак, репитер - это наша область заголовка, а внутри у нас есть сетка.

Итак, при загрузке страницы мы заполняем репитер, и для каждого события строки репитера заполняем сетку.

Итак, код выглядит так:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If IsPostBack = False Then

        Using cmdSQL As New SqlCommand("SELECT JobNo FROM jobs GROUP BY JobNo",
                        New SqlConnection(My.Settings.TEST4))

            cmdSQL.Connection.Open()
            Repeater1.DataSource = cmdSQL.ExecuteReader
            Repeater1.DataBind()

        End Using

    End If
End Sub

Protected Sub Repeater1_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles Repeater1.ItemDataBound

    Dim txtJobNum As TextBox = e.Item.FindControl("txtJobNum")

    Dim gv As GridView = e.Item.FindControl("GridView1")

    Using cmdSQL As New SqlCommand("Select * from jobs where JobNo = " & txtJobNum.Text, New SqlConnection(My.Settings.TEST4))
        cmdSQL.Connection.Open()
        Dim MyTable As New DataTable
        MyTable.Load(cmdSQL.ExecuteReader)
        gv.DataSource = MyTable
        gv.DataBind()


        ' now add total row
        Dim Expense As Decimal = 0
        Dim Income As Decimal = 0
        For Each OneRow In MyTable.Rows
            Expense += OneRow("Expense")
            Income += OneRow("Income")
        Next

        Dim Profit As Decimal = Income - Expense

        Dim ix As Integer = gv.FooterRow.Cells.Count
        gv.FooterRow.Cells(1).Text = "Gross Profit ="
        gv.FooterRow.Cells(2).Text = Profit
        gv.FooterRow.Cells(ix - 2).Text = Expense
        gv.FooterRow.Cells(ix - 1).Text = Income

    End Using
End Sub

Изменить: - этот пост не был помечен как C # - поэтому я опубликовал его как vb.

Однако, как в C #, код будет выглядеть так:

protected void Page_Load(object sender, System.EventArgs e)
{
    if (IsPostBack == false)
    {
        using (SqlCommand cmdSQL = new SqlCommand("SELECT JobNo FROM jobs GROUP BY JobNo", new SqlConnection(My.Settings.TEST4)))
        {
            cmdSQL.Connection.Open();
            Repeater1.DataSource = cmdSQL.ExecuteReader;
            Repeater1.DataBind();
        }
    }
}

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    TextBox txtJobNum = e.Item.FindControl("txtJobNum");

    GridView gv = e.Item.FindControl("GridView1");

    using (SqlCommand cmdSQL = new SqlCommand("Select * from jobs where JobNo = " + txtJobNum.Text, new SqlConnection(My.Settings.TEST4)))
    {
        cmdSQL.Connection.Open();
        DataTable MyTable = new DataTable();
        MyTable.Load(cmdSQL.ExecuteReader);
        gv.DataSource = MyTable;
        gv.DataBind();


        // now add total row
        decimal Expense = 0;
        decimal Income = 0;
        foreach (var OneRow in MyTable.Rows)
        {
            Expense += OneRow("Expense");
            Income += OneRow("Income");
        }

        decimal Profit = Income - Expense;

        int ix = gv.FooterRow.Cells.Count;
        gv.FooterRow.Cells(1).Text = "Gross Profit =";
        gv.FooterRow.Cells(2).Text = Profit;
        gv.FooterRow.Cells(ix - 2).Text = Expense;
        gv.FooterRow.Cells(ix - 1).Text = Income;
    }
}

Результат выглядит так:

введите описание изображения здесь

Теперь, как показано выше, у меня только что были данные в таблице. Непонятно, как / где / когда / во что импортируются ваши данные. Но перенесите данные в таблицу данных. Если у вас есть только одна таблица и вы не можете использовать SQL group by, то просто создайте вторую таблицу, зациклите JobNo на этой таблице и привяжите ее к повторителю.

Подход, концепция, идея здесь?

Ваш заголовок и текст - это элемент управления повторителем, поскольку на самом деле это не таблица.

Тогда сетка часть / таблица? Это может быть вид сетки. Вы заполняете его для каждого группового ряда, а затем, конечно, суммируете результаты и вставляете их в нижний ряд.

person Albert D. Kallal    schedule 22.05.2021
comment
сэр, я хочу, чтобы этот код был в asp.net С #, а не в vb.net ... - person Akhilesh Singh; 22.05.2021
comment
Хорошо, я публикую код на C # - вы не пометили свой вопрос как C # - и, вероятно, это хорошо, так как я, возможно, не ответил на этот вопрос! - код тот же - но я выложу код как c #. Как вы можете видеть в любом случае, это ОЧЕНЬ мало кода. И на самом деле речь идет НЕ о C # или vb, а о том, КАК вы думаете, и КАК вы подходите к решению этой проблемы. Код на самом деле не должен иметь здесь никакого значения, но вы смотрите на это и УЖЕВАЕТЕ, как мы подходим к проблеме. это ВСЕ О концепциях здесь - имея в виду концепции, написание кода - ЛЕГКАЯ часть. - person Albert D. Kallal; 22.05.2021
comment
сэр, большое спасибо ... за ваше решение ... я пробовал это решение, оно работает для меня ... еще раз спасибо ... - person Akhilesh Singh; 22.05.2021