Требуется общее количество нижнего колонтитула в gridview в текстовом поле за пределами gridview

#asp.net

#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.
Заранее спасибо.

Ответ №1:

Вы могли бы попробовать установить это вне события 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;
        }
    }
}
  

Ответ №2:

Используйте textbox вместо label попробуйте. Текстовое поле доступно с тем же синтаксисом, но я видел проблемы с label.

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

Ответ №3:

Как насчет чего-то подобного:

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