如何找到GridView中单击行中的任何控件?

时间:2013-03-22 13:11:31

标签: c# asp.net sql gridview

我正在尝试创建嵌套注释。 下面的代码给我索引超出范围。必须是非负数且小于集合的大小。 参数名称:index

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")%>' />

1 个答案:

答案 0 :(得分:2)

尝试获取行索引,如:

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

一般情况下,commandArgument默认包含rowIndex,但在您的情况下,您会使用Eval("ScrapId")覆盖标记中的。{/ p>

e是一个对象,包含有关被触发事件的信息。 ComandSource是触发事件的源代码控件,在你的情况下是Button,所以我们转换为Button。 比,我们有NamingContainer,它是包裹你的Button的服务器控件,在这种情况下是GridViewRow

使用GridViewRow,我们可以直接访问活动时的活动行,并且我们有更多关于该行的数据,包括当前的RowIndex