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.
}
}
}