QA@IT
«回答へ戻る

12
     </Columns>
 </asp:GridView>
 ```
+SurferOnWwwさんの回答にacceptしたいのですが、どうすればよいでしょうか?

SurferOnWwwさん、ありがとうございます。
理解していなくて申し訳ありません。
ブラウザはIEなので開発者ツールで確認したところGridViewではなくtableでした。
なので直接TextBoxのidを指定し入力値を取得するようにしました。
下記のようにしました。
[関数側]

function aaa(own) {
    var idSplit = own.id.split("_");
    var rowNum = Number(idSplit[2]);    // 自身のidから行数を取得
    var total = 0;
    // TextBox1,2の合計値を計算
    for (var i = 1; i < 3; i++) {
        var tb = document.getElementById("GridView1_TextBox" + i + "_" + rowNum);
        if (tb.value != "") {
            total += Number(tb.value);
        }
    }
    var tb3 = document.getElementById("GridView1_TextBox3_" + rowNum);
    tb3.value = total;  // 合計列へ入力    
}

[呼び出し側]

<asp:GridView ID="GridView1" runat="server" EnableViewState="False" 
  OnRowCreated="GridView1_RowCreated" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox1" runat="server" onchange="aaa(this)"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox2" runat="server" onchange="aaa(this)"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    </Columns>
</asp:GridView>

SurferOnWwwさんの回答にacceptしたいのですが、どうすればよいでしょうか?

SurferOnWwwさん、ありがとうございます。
理解していなくて申し訳ありません。
ブラウザはIEなので開発者ツールで確認したところGridViewではなくtableでした。
なので直接TextBoxのidを指定し入力値を取得するようにしました。
下記のようにしました。
[関数側]
```javascript
function aaa(own) {
    var idSplit = own.id.split("_");
    var rowNum = Number(idSplit[2]);    // 自身のidから行数を取得
    var total = 0;
    // TextBox1,2の合計値を計算
    for (var i = 1; i < 3; i++) {
        var tb = document.getElementById("GridView1_TextBox" + i + "_" + rowNum);
        if (tb.value != "") {
            total += Number(tb.value);
        }
    }
    var tb3 = document.getElementById("GridView1_TextBox3_" + rowNum);
    tb3.value = total;  // 合計列へ入力    
}
```
[呼び出し側]
```html
<asp:GridView ID="GridView1" runat="server" EnableViewState="False" 
  OnRowCreated="GridView1_RowCreated" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox1" runat="server" onchange="aaa(this)"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox2" runat="server" onchange="aaa(this)"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    </Columns>
</asp:GridView>
```
SurferOnWwwさんの回答にacceptしたいのですが、どうすればよいでしょうか?

回答を投稿

SurferOnWwwさん、ありがとうございます。
理解していなくて申し訳ありません。
ブラウザはIEなので開発者ツールで確認したところGridViewではなくtableでした。
なので直接TextBoxのidを指定し入力値を取得するようにしました。
下記のようにしました。
[関数側]

function aaa(own) {
    var idSplit = own.id.split("_");
    var rowNum = Number(idSplit[2]);    // 自身のidから行数を取得
    var total = 0;
    // TextBox1,2の合計値を計算
    for (var i = 1; i < 3; i++) {
        var tb = document.getElementById("GridView1_TextBox" + i + "_" + rowNum);
        if (tb.value != "") {
            total += Number(tb.value);
        }
    }
    var tb3 = document.getElementById("GridView1_TextBox3_" + rowNum);
    tb3.value = total;  // 合計列へ入力    
}

[呼び出し側]

<asp:GridView ID="GridView1" runat="server" EnableViewState="False" 
  OnRowCreated="GridView1_RowCreated" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox1" runat="server" onchange="aaa(this)"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox2" runat="server" onchange="aaa(this)"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    </Columns>
</asp:GridView>
SurferOnWwwさん、ありがとうございます。
理解していなくて申し訳ありません。
ブラウザはIEなので開発者ツールで確認したところGridViewではなくtableでした。
なので直接TextBoxのidを指定し入力値を取得するようにしました。
下記のようにしました。
[関数側]
```javascript
function aaa(own) {
    var idSplit = own.id.split("_");
    var rowNum = Number(idSplit[2]);    // 自身のidから行数を取得
    var total = 0;
    // TextBox1,2の合計値を計算
    for (var i = 1; i < 3; i++) {
        var tb = document.getElementById("GridView1_TextBox" + i + "_" + rowNum);
        if (tb.value != "") {
            total += Number(tb.value);
        }
    }
    var tb3 = document.getElementById("GridView1_TextBox3_" + rowNum);
    tb3.value = total;  // 合計列へ入力    
}
```
[呼び出し側]
```html
<asp:GridView ID="GridView1" runat="server" EnableViewState="False" 
  OnRowCreated="GridView1_RowCreated" AutoGenerateColumns="False">
    <Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox1" runat="server" onchange="aaa(this)"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox2" runat="server" onchange="aaa(this)"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    </Columns>
</asp:GridView>
```