在gridview外的文本框中需要gridview中的页脚总数

时间:2011-04-20 21:06:26

标签: asp.net

我有一个带有页脚的gridview,我在页脚中显示了价格列的总和。我想访问页脚中的值并将其显示在gridview外面的文本框中。

这就是我的gridview只查看页脚模板的方式

 <asp:TemplateField HeaderText="Total" >
<ItemTemplate>
<asp:Label ID="lbltotal" runat="server" Text='' ></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lbltotalprice" runat="server" Text=''></asp:Label>
</FooterTemplate>
</asp:TemplateField>

以下是我在页脚中显示总数的方式

In gridview rowdatabound event
    if (e.Row.RowType == DataControlRowType.Footer)
            {
                Label amounttotal = (Label)e.Row.FindControl("lbltotalprice");
                amounttotal.Text = String.Format("{0:C2}", total);
            }  

我在下面的方法中尝试了另一种方法

GridViewRow row = GridView1.FooterRow; 
Total.Text= ((Label)row.FindControl("lbltotalprice")).ToString();--- does not help at all

请帮助在gridview外部的texbox中的页脚中访问此值。 提前谢谢。

3 个答案:

答案 0 :(得分:2)

您可以尝试在ItemDataBound事件之外设置此项,一旦您的列表已被绑定并且项目数量已全部填充(以便您可以检索这些值并计算总数)。如何执行此操作的示例如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        MyGrid.DataSource = GetDataSource();
        MyGrid.DataBind();

        SetTotalInGridFooter();
    }
}

private void SetTotalInGridFooter()
{
    double total = 0;

    foreach (RepeaterItem ri in in MyGrid.Items)
    {
        if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem)
        {
            double d;

            Label lbltotal = (Label) ri.FindControl("lbltotal");

            if (Double.TryParse(lbltotal.Text, out d))
               total += d;

            continue;
        }

        if (ri.ItemType == ListItemType.Footer)
        {
            Label lbltotalprice = (Label) ri.FindControl("lbltotalprice");
            lbltotalprice.Text = String.Format("{0:C2}", total);

            break;
        }
    }
}

答案 1 :(得分:1)

这样的事情:

if (e.Row.RowType == DataControlRowType.Footer)
{
     Label amounttotal = (Label)e.Row.FindControl("lbltotalprice");
     amounttotal.Text = String.Format("{0:C2}", total);
     Total.Text = amounttotal.Text;
}

答案 2 :(得分:1)

使用文本框而不是标签尝试它。可以使用相同的语法访问文本框,但我看到了标签问题。

string a = ((TextBox)row.FindControl("TextBox1")).Text;