DataManipulation в полях шаблонов вида сетки

Вот скриншот моей веб-страницы с двумя панелями. Первая панель заполняет вид сетки во второй панели. Общая сумма столбцов, Регистрационный взнос, Рассрочка, ожидающий платеж - поля шаблона. Я хочу рассчитать ожидающий сбор = Общая сумма - Регистрационный взнос - (сумма взносов) в нижнем колонтитуле ожидающего сбора. Я также хочу отобразить сумму взносов, оплаченных в нижнем колонтитуле.

Может ли кто-нибудь рассказать мне, как это сделать.

Это вывод, который я получаю, а под ним - исходный код страницы.

 <asp:TemplateField HeaderText="Total Fee">
                                <ItemTemplate>
                                    <asp:Label ID="Lbl_TotalFee" runat="server" Text='<%# Eval("total_fee") %>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Registration Fee">
                                <ItemTemplate>
                                <asp:Label ID="LblRegFee" runat="server" Text='<%# Eval("reg_fee") %>'></asp:Label>
                                </ItemTemplate>
                                <FooterTemplate>
                                 <asp:Label ID="LblInstallments" runat="server" Text="Total Installments"/>
                                </FooterTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Installments">
                                <ItemTemplate>
                                    <asp:Label ID="Lbl_Installment" runat="server" 
                                        Text='<%# Eval("installments")%>'></asp:Label>

                                </ItemTemplate>
                                <FooterTemplate>
                                 <asp:Label ID="LblTotalIns" runat="server" />
                </FooterTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Pending Fee">
                                <ItemTemplate>

                                </ItemTemplate>
                                <FooterTemplate>
                                    <asp:Label ID="LblFinalPendingFee" runat="server" ></asp:Label>
                                </FooterTemplate>
                            </asp:TemplateField>

Это код позади....

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    double sum = 0;
    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        //double installments = (e.Data.DataItem as double).installments;
        if (DataBinder.Eval(e.Row.DataItem, "installments") != DBNull.Value)
        {
            sum += Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "installments"));
            en.Fee_TotalSumOfInstallments = sum.ToString();
        }
        else
        {
            en.Fee_TotalSumOfInstallments = "nill";
        }
    }
    if (e.Row.RowType == DataControlRowType.Footer)
    {
        Label LblTotalIns = (Label)e.Row.FindControl("LblTotalIns");
        LblTotalIns.Text = en.Fee_TotalSumOfInstallments.ToString();
        Label LblFinalPendingFee = (Label)e.Row.FindControl("LblFinalPendingFee");
        double PendFee=(Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "total_fee"))-(Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "reg_fee"))+sum));
        en.Fee_TotalPendingFee=PendFee.ToString();
        LblFinalPendingFee.Text = en.Fee_TotalPendingFee.ToString();
        //string abc = (Convert.ToInt32(e.Row.FindControl("Lbl_TotalFee")) - Convert.ToInt32(e.Row.FindControl("LblRegFee")) - total).ToString();
    }  
}

Проблема в том, что ожидающий платеж всегда рассчитывается 0. где я тут не прав? Пожалуйста, помогите!

Благодарю.

1 ответ

Объявите свойства уровня страницы:

public double TotalPendingFee { get; set; }
public double TotalSumOfInstallments { get; set; }

Создайте шаблон нижнего колонтитула, подобный этому, для каждого нижнего колонтитула:

<asp:TemplateField HeaderText="PendingFee">
        <ItemTemplate>
            <asp:Label ID="lblPendingFee" runat="server" Text='<%# Eval("PendingFee")%>' />
         </ItemTemplate>
         <FooterTemplate>
            <asp:Label ID="lblTotalPendingFee" runat="server" />
         </FooterTemplate>                   
</asp:TemplateField>

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

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
   if (e.Row.RowType == DataControlRowType.DataRow)
   { 
      double pendingFee = (e.Data.DataItem as YourType).PendingFee;
      // same for installments.

      TotalPendingFee  += pendingFee;  // use your formula
   } 

   if (e.Row.RowType == DataControlRowType.Footer) 
   { 
      Label lblTotalPendingFee  = (Label)e.Row.FindControl("lblTotalPendingFee  "); 
      lblTotalPendingFee.Text =  TotalPendingFee.ToString();

      // same for sum of installments 
   } 
}

Кроме того, если PendingFee не является столбцом БД, вы можете создать свойство только для получателя в классе Dat (который имеет TotalFee, RegistrationFee) и оценить PendingFee.

Eval("PendingFee") не нужно менять.

собственность будет:

public class DataClass
{
 public double PendingFee
 {
  get
  {
   return this.TotalFee - this. RegistrationFee - 0; // your formula.
  }
 }
}
Другие вопросы по тегам