この問題を回避しました。gridview にはテンプレート列があります (CommandArgument で 2 つの引数を渡しています):
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ToolTip="Delete" ID="button4" ButtonType="Image" ImageUrl="~/Projectimages/img_del.png" Text="" CommandName="Select" CommandArgument='<%#Eval("ID") + ";" +"Delete"%>' runat="server"/>
</ItemTemplate>
</asp:TemplateField>
コード ビハインドでは、CommandArgument を分割し、値を変数に保存してから、それらを SelectedIndexChanged イベントで使用しています。
string selectCommand = "";
int selectCommandID = -1;
protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
if (!e.CommandArgument.ToString().Contains(";"))
selectCommand = "Select";
else
{
selectCommandID = Convert.ToInt32(e.CommandArgument.ToString().Split(';')[0]);
selectCommand = e.CommandArgument.ToString().Split(';')[1];
}
}
}
protected void GridView_SelectedIndexChanged(object sender, EventArgs e)
{
if (selectCommand == "Select")
{
//Select Code Here
}
else if (selectCommand == "Delete")
{
MyTestEntities context = new MyTestEntities();
Table1 selectedRow = context.Table1.Single(a => a.ID == selectCommandID);
context.Table1.DeleteObject(selectedRow);
context.SaveChanges();
EntityDataSource1.DataBind();
}
}
これは機能します。これをグリッドビュー行の更新にも使用できます。