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();
}
}
行数取得できた。