页脚Total Gridview TextChangedEvent

时间:2014-11-07 10:09:08

标签: c# asp.net

我在Gridview Control中有Textbox。当我在Textbox上输入数量时,我必须在Gridview页脚上显示。

我试过这个,

static float total=0;

 protected void txtintroId_TextChanged(object sender, EventArgs e)
    {
    TextBox txt = (TextBox)sender;

    GridViewRow grid = ((GridViewRow)txt.Parent.Parent.Parent);

    TextBox txt1= (TextBox)txt.FindControl("txtbox");
     total=float.parse(txt1.Text);
    GridView1.FooterRow.Cells[4].Text = total.ToString();
    }

它的工作原理,但问题是一次又一次地更改相同的文本框值。文本框值添加总计。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

  1. 而不是txt.Parent.Parent.Parent使用txt.NamingContainer
  2. 其次,不要在ASP.NET中使用静态字段。这是在所有请求中共享的。而是使用ViewState / Session / Hiddenfield在回发中保留一个值。
  3. 如果你不想让它得到总结,那就不要坚持回复,只需重新计算:

  4. TextBox txt = (TextBox)sender;
    float value = float.Parse(txt.Text);
    GridViewRow row = (GridViewRow) txt.NamingContainer;
    GridView gridView = (GridView) row.NamingContainer;
    float total = gridView.Rows.Cast<GridViewRow>()
        .Sum(row => float.Parse(((TextBox) row.FindControl("txtbox")).Text));
    

    如果你不能使用LINQ或TextBoxes可以为空或包含其他无效格式,请使用普通循环:

    float total = 0;
    foreach (GridViewRow gridViewRow in gridView.Rows)
    {
        txt = (TextBox) gridViewRow.FindControl("txtbox");
        float rowValue = 0;
        if (float.TryParse(txt.Text.Trim(), out rowValue))
            total += rowValue;
    }