私はasp.net GridViewを持っています:
<asp:TemplateField HeaderText="View Faktor" ShowHeader="False" Visible="True">
<ItemTemplate>
<asp:ImageButton ID="imgBtn1" CssClass="SelectRow" runat="server" CausesValidation="false"
CommandArgument='<%#(eval("mprID")) %>' CommandName="ViewFactors" ImageUrl="~/tadarokat/Images/factor.png"
Text="" />
</ItemTemplate>
</asp:TemplateField>
行コマンドイベントでrowIndex
を取得するにはどうすればよいですか?
select
が起動したときに(RowCommand
)ターゲット行を強調表示します。
これはあなたの質問に対する答えです。
GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
int RowIndex = gvr.RowIndex;
ImageButton \ボタンなど.
CommandArgument='<%# Container.DataItemIndex%>'
コードビハインド
protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index = e.CommandArgument;
}
挿入、更新、削除などのGridViewの組み込みコマンドがある場合、行コマンドでは、次のコードを使用してインデックスを取得できます。
_int index = Convert.ToInt32(e.CommandArgument);
_
カスタムコマンドでは、コマンド引数をyourRow.RowIndex.ToString()
に設定し、RowCommandイベントハンドラーで取得できます。もちろん、別の目的でコマンド引数が必要な場合を除きます。
または、タイプの代わりにcontrol
クラスを使用できます。
GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
int RowIndex = row.RowIndex;
私は自分のプロジェクトで@rahularyansharmaの answer を使用することができました。ユーザーがLinkButton
をクリックした行の特定のセルの値を取得する必要がありました。 2行目を変更して、必要な数のセルの値を取得できます。
私の解決策は次のとおりです。
GridViewRow gvr = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
string typecore = gvr.Cells[3].Text.ToString().Trim();
protected void gvProductsList_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
if (e.CommandName == "Delete")
{
GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
int RemoveAt = gvr.RowIndex;
DataTable dt = new DataTable();
dt = (DataTable)ViewState["Products"];
dt.Rows.RemoveAt(RemoveAt);
dt.AcceptChanges();
ViewState["Products"] = dt;
}
}
catch (Exception ex)
{
throw;
}
}
protected void gvProductsList_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
try
{
gvProductsList.DataSource = ViewState["Products"];
gvProductsList.DataBind();
}
catch (Exception ex)
{
}
}