我有一个带有页脚的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中的页脚中访问此值。 提前谢谢。
答案 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;