我正在尝试创建嵌套注释。 下面的代码给我索引超出范围。必须是非负数且小于集合的大小。 参数名称: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")%>' />
答案 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