我有一种情况,我在页面 GridView1 - GridView4 上有多个 GridView。所有这些 GridView 在单元格中都有文本框,我想仅在被单击的文本框的列和特定的 GridView 上运行计算函数。
示例:用户单击 GridView3 的第 2 列中的 TextBox 并更改数字值,该特定 TextBox 的 OnTextChange 事件应触发以运行计算并汇总页脚标签中 GridView3 Col2 的所有数字。
我搜索了我发现的所有其他建议,假设您只有 1 个网格,并且您知道计算是在 IE 价格列中完成的预设列,但我不知道用户将在我的任何 4 中编辑哪些列信息网格视图。
我放弃并决定只在整个 GridView 上运行计算代码,而不仅仅是编辑的列,但为此我需要获取包含 TextBox 的 Gridview 的 GridView.ID。广泛的 serches 想出了如何获取发件人项目的 ID,而不是包含发件人的 GridView.ID。
如果有人可以帮助解决这两种情况,请这样做,我将非常感激。
根据下面的对话,我编辑了这篇文章以包含 Tim 提供的编辑后的答案,希望其他人可以从这段代码中学习:
//This is working code
protected void textBox_TextChanged(Object sender, EventArgs e)
{
TextBox txt = (TextBox)sender;
GridViewRow gvRow = (GridViewRow)txt.NamingContainer;
GridView Grid = (GridView)gvRow.NamingContainer;
// if you need the index of the column of the TextBox
int colIndex = 0;
for (int i = 0; i < gvRow.Cells.Count; i++)
{
if (gvRow.Cells[i] == txt.Parent)
{
colIndex = i;
Msg.Text = "Col: "+colIndex.ToString();
break;
}
}
int gridNum = 0;
switch (Grid.ID)
{
case "GridView1":
gridNum = 1;
break;
case "GridView2":
gridNum = 2;
break;
case "GridView3":
gridNum = 3;
break;
case "GridView4":
gridNum = 4;
break;
}
Label ColTotal = (Label)Grid.FooterRow.FindControl("G" + gridNum + "TotalPP" + colIndex);
double total = 0;
foreach (GridViewRow row in Grid.Rows)
{
TextBox tb = (TextBox)row.FindControl(txt.ID);
double d;
if (double.TryParse(tb.Text, out d))
total += d;
}
ColTotal.Text = total.ToString();
}
可以看到,根据代码设置的方式,colIndex会帮我找到每一列的页脚标签,并把它的总和放进去。