ページ GridView1 - GridView4 に複数の GridView がある状況があります。これらすべての GridView には、セルに TextBox があります。クリックされた TextBox の列と、その特定の GridView でのみ計算関数を実行したいと思います。
例: ユーザーが GridView3 の列 2 の TextBox をクリックして数値を変更すると、その特定の TextBox の OnTextChange イベントが発生して計算が実行され、フッター ラベルの GridView3 Col2 のすべての数値が合計されます。
私が検索した他のすべての提案は、グリッドが1つしかなく、IEで価格列で計算が行われるプリセット列を知っていることを前提としていますが、ユーザーが私の4つのいずれかで編集する列情報はわかりませんGridView。
私はあきらめて、編集された列だけでなく、GridView 全体で計算コードを実行することを解決しましたが、これを行うには、TextBox を含む Gridview の GridView.ID を取得する必要があります。送信者 Item の ID を取得する方法については広範な検索が行われましたが、送信者を含む GridView.ID は取得されませんでした。
誰かがどちらかの状況で助けてくれるなら、そうしてください、本当に感謝します.
以下の会話に従って、この投稿を編集して、他の人がこのコードから学ぶことを期待して、ティムによって提供された編集済みの回答を含めました。
//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 は各列のフッター ラベルを見つけて合計を入れるのに役立ちます。