GridViewのItemTemplateに配置したボタンクリック時に、行数を取得できない

 

ASP.NET4(C#)でやってる。

GridViewのTemplate列を追加し、ボタンコントロールを2つ配置する。

<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button ID="Button1" runat="server" CausesValidation="false"
CommandName="dlt" Text="削除" />
<br />
<asp:Button ID="Button2" runat="server" CausesValidation="False"
CommandName="upd" Text="更新" />
</ItemTemplate>
</asp:TemplateField>

RowCommandイベント発生時にCommandArgumentから行番号を取得しようとしたのだが、どうやら空文字が入っているらしく、「入力文字列の形式が正しくありません。 」となる。


int rowIndex = Convert.ToInt32(e.CommandArgument);

 
 

対応として、RowCreatedイベント発生時に行数をセットするようにした。


protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Button dltButton = (Button)e.Row.FindControl("Button1");
Button updButton = (Button)e.Row.FindControl("Button2");

dltButton.CommandArgument = e.Row.RowIndex.ToString();
updButton.CommandArgument = e.Row.RowIndex.ToString();
}
}

行数取得できた。