#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;
}