0

ネストされたコメントを作成しようとしています。以下のコードは、インデックスが範囲外であったことを示しています。負ではなく、コレクションのサイズよりも小さい必要があります。パラメータ名:インデックス

protected void GridViewRowCommand(Object sender, GridViewCommandEventArgs e)
{
    var scrapId = Int32.Parse(e.CommandArgument.ToString());
    switch (e.CommandName)
    { 
        case "comment":
            int index = Convert.ToInt32(e.CommandArgument);
            GridViewRow gvRow = GridViewUserScraps.Rows[index];
            TextBox txtcomment = (TextBox)GridViewUserScraps.Rows[index].FindControl("txtcomment");

            string postcomment = "Insert INTO comment (FromId,ToId,PostId,CommentMsg) VALUES('" + Session["UserId"].ToString() + "','" + Request.QueryString["Id"].ToString() + "','" + scrapId + "','"+txtcomment.Text+"')";
            dbClass.ConnectDataBaseToInsert(postcomment);

            break;
    }
}

datakeynameは.です。DataKeyNames="ScrapId"

クリックして投稿するボタンと同じ行にあるテキストボックスの値を渡したいです。

ボタン:

<asp:Button ID="Button1" runat="server" Text="Comment" CommandName="comment" 
                                        CommandArgument='<%# Eval("ScrapId")%>' />
4

1 に答える 1

2

次のように行インデックスを取得してみてください。

GridViewRow gvr = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
int index = gvr.RowIndex;

通常、commandArgumentにはデフォルトでrowIndexが含まれていますが、あなたの場合、タグでそれを上書きしていますEval("ScrapId").

e、発生したイベントに関する情報を含むオブジェクトです。ComandSourceイベントを発生させたソースコントロールです。あなたの場合はボタンなので、ボタンにキャストします。それよりも、NamingContainerボタンをラップするサーバー コントロールである があります。この場合はGridViewRowです。

を使用するGridViewRowと、イベント時にアクティブな行に直接アクセスでき、現在の行を含む、行に関するより多くのデータがあります。RowIndex

于 2013-03-22T13:34:59.640 に答える