【发布时间】:2012-11-27 15:24:07
【问题描述】:
我有一种情况,我在页面 GridView1 - GridView4 上有多个 GridView。 所有这些 GridView 在单元格中都有 TextBoxes,我想只在被点击的 TextBox 的列和特定的 GridView 上运行计算函数。
示例:用户单击 GridView3 的第 2 列中的 TextBox 并更改一个数值,该特定 TextBox 的 OnTextChange 事件应触发以运行计算并将页脚标签中 GridView3 Col2 的所有数字合计。
我搜索了所有其他我发现的建议假设您只有 1 个网格,并且您知道计算是在 IE 价格列中完成的预设列,但我不知道用户将在任何列中编辑哪些列信息我的 4 个 GridViews。
我放弃并决定只在整个 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会帮我找到每一列的页脚标签,并将其放入。
【问题讨论】:
标签: c# asp.net gridview textbox