ASP.Net Grid Просмотр скользящего итога в Gridview - PullRequest
1 голос
/ 10 мая 2009

Я видел несколько уроков о том, как этого добиться.

Однако, по моему мнению, они требуют много предварительных знаний о том, как программно ссылаться на каждый предмет.

Кто-нибудь имеет ссылку или может создать сравнительно простой пример того, как получить промежуточную сумму в нижнем колонтитуле для ASP: Gridview?

Ответы [ 4 ]

2 голосов
/ 11 мая 2009

Вот что я использую:

protected void InvoiceGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    var invoice = (Invoice) e.Row.DataItem;
    if (e.Row.RowType == DataControlRowType.Header)
    {
        totalAmt = 0;
    }
    else if (e.Row.RowType == DataControlRowType.DataRow)
    {
        totalAmt += invoice.Amount;
    }
    else if (e.Row.RowType == DataControlRowType.Footer)
    {
        var amountTotalLabel = (TextBox) e.Row.FindControl("AmountTotalTextBox");
        amountTotalLabel.Text = totalAmt.ToString("0.00");
    }
}

TotalAmt - защищенная переменная экземпляра на странице. Не уверен, что это то, что вы искали, основываясь на вашем комментарии о «программных знаниях». Но это работает и довольно просто. В этом случае вид сетки привязан к List<Invoice>.

0 голосов
/ 28 апреля 2014

Я думаю, что метод, который я использую, довольно простой и не требует программной ссылки на столбцы в Gridview, если вы это имеете в виду. Это одна из приятных особенностей: когда вы пишете фоновые функции, вы можете добавлять итоги в любой Gridview, редактируя только файл .aspx.

В вашем GridView сделайте столбец следующим образом:

<asp:TemplateField HeaderText="Hours">
    <ItemTemplate><%#DisplayAndAddToTotal(Eval("Hours").ToString(), "Hours")%></ItemTemplate>
    <FooterTemplate><%#GetTotal("Hours")%></FooterTemplate>
</asp:TemplateField>

Вторым параметром для DisplayAndAddToTotal может быть любая строка, которую вы хотите, если вы используете ту же строку в GetTotal. Я обычно просто снова использую имя поля. Вот две используемые функции: DisplayAndAddToTotal и GetTotal. Они используют Hashtable для хранения итогов, чтобы он работал с любым количеством столбцов, которые вы хотите сложить. И они также работают с подсчетом числа «Истина» для логического поля.

Protected total As Hashtable = New Hashtable()

Protected Function DisplayAndAddToTotal(itemStr As String, type As String) As Double
    Dim item As Double

    If itemStr = "True" Then
        item = 1

    ElseIf Not Double.TryParse(itemStr, item) Then
        item = 0
    End If

    If total.ContainsKey(type) Then
        total(type) = Double.Parse(total(type).ToString()) + item
    Else
        total(type) = item
    End If

    Return item
End Function

Protected Function GetTotal(type As String) As Double
    Try
        Dim result As Double = Double.Parse(total(type).ToString())
        Return result
    Catch
        Return 0
    End Try
End Function
0 голосов
/ 03 января 2013

Вот как я это делаю. Очень просто. Вы просто суммируете строку, в которой есть ваши номера, и помещаете ее в нижний колонтитул.

((Label)GridView.FooterRow.Cells[1].FindControl("your_label")).Text = ds.Tables[0].Compute("sum(Column_name)", "").ToString();
0 голосов
/ 11 мая 2009

Добавьте шаблон нижнего колонтитула и в RowDataBound есть глобальная переменная для хранения суммы суммирования,

В типе e.Row.RowType = DataControlRowType.DataRow выполните суммирование, а @ the e.Row.RowType = DataControlRowType.Footer сохранит значение в соответствующей ячейке

для получения дополнительной информации смотрите @ MSDN LINK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...