C# 如何使用C从父Gridview获取值#

C# 如何使用C从父Gridview获取值#,c#,asp.net,gridview,C#,Asp.net,Gridview,我试图使用嵌套Gridview中的链接按钮从父Gridview获取ID,但每次单击链接时都会获得不同的ID。例如,如果我单击25的链接ID,我会得到ID 24的值,或者如果我单击ID#18的链接,我会得到ID#17的值,依此类推。。。所以它总是负一。那么,如果我有row.Cells[0]我想显示row.Cells[0]+1之类的内容,那么如何增加我的行ID呢。我只是需要一些解决方案,所以请帮忙。这是我的密码: protected void Edit(object sender, EventAr

我试图使用嵌套Gridview中的链接按钮从父Gridview获取ID,但每次单击链接时都会获得不同的ID。例如,如果我单击25的链接ID,我会得到ID 24的值,或者如果我单击ID#18的链接,我会得到ID#17的值,依此类推。。。所以它总是负一。那么,如果我有row.Cells[0]我想显示row.Cells[0]+1之类的内容,那么如何增加我的行ID呢。我只是需要一些解决方案,所以请帮忙。这是我的密码:

 protected void Edit(object sender, EventArgs e)
    {
        using (GridViewRow row = (GridViewRow)((LinkButton)sender).Parent.Parent)
        {

            string myvar = row.Cells[0].Text;

            sqlcon.Open();
            sqlcmd = new SqlCommand(@"Select ID, Name, Location where ID = '" + myvar + "' ", sqlcon);
            da = new SqlDataAdapter(sqlcmd);
            da.Fill(dt);
            sqlcon.Close();
            DV_Edit.DataSource = dt;
            DV_Edit.DataBind();
            sqlcon.Close();

            popup.Show();
        }
}
我正在添加一行用于在Gridview的标题上方搜索,我相信这就是我得到不匹配的原因。以下是添加行的代码:

   protected void OnDataBound(object sender, EventArgs e)
    {
        GridViewRow row = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
        for (int i = 0; i < GV_EditProject.Columns.Count; i++)
        {
            TableHeaderCell cell = new TableHeaderCell();
            TextBox txtSearch = new TextBox();
            txtSearch.Attributes["placeholder"] = GV_EditProject.Columns[i].HeaderText;
            txtSearch.CssClass = "search_textbox";
            cell.Controls.Add(txtSearch);
            row.Controls.Add(cell);
        }
        GV_EditProject.HeaderRow.Parent.Controls.AddAt(1, row);
    }
受保护的void OnDataBound(对象发送方,事件参数e)
{
GridViewRow行=新的GridViewRow(0,0,DataControlRowType.Header,DataControlRowState.Normal);
对于(int i=0;i
您应该在GridView的定义中包含DataKeyName

<asp:GridView ID="gridview1" runat="server" DataKeyNames="ID" ... />

您可以尝试NamingContainer属性

using (GridViewRow row = (GridViewRow)((LinkButton)sender).NamingContainer)
{

   string myvar = row.Cells[0].Text;

}
这个

使用(GridViewRow=(GridViewRow)((LinkButton)sender.Parent.Parent)
{
整数idx=row.RowIndex+1;
if(idx
Rick,我已经在我的gridview中包含了数据键,但我使用的解决方案与您建议的解决方案略有不同。我使用gridview父级访问ID,如何修改我的代码以使用数据键?谢谢我已更新了我的答案。但是,我不确定您获取行的解决方案是否100%正确。试试看有什么发生了。你是什么意思,它不起作用?你得到了一个错误?错误的Id?瑞克,我已经更新了我的代码,所以请看我的初始帖子。我想我在标题上方添加了行,这些行用于搜索gridview,我想这就是我得到不匹配的原因。请看我的初始帖子。谢谢Sunnie,我已经尝试过了,但没有ot工作。我已经更新了我的初始帖子,请查看。我正在动态添加一个空行,这些行用于在gridview中搜索。也许这就是我出现这些问题的原因。谢谢Jumpei,您的解决方案有效。但只有当父gridview中有多行时,这意味着如果我有2、3行或更多行,它才有效很好,但是当我只有一行时,它就不起作用了,我得到了这个错误:“索引超出范围。必须是非负的,并且小于集合的大小。参数名称:Index”请帮助我,我就快到了。谢谢
using (GridViewRow row = (GridViewRow)((LinkButton)sender).NamingContainer)
{

   string myvar = row.Cells[0].Text;

}
    using (GridViewRow row = (GridViewRow)((LinkButton)sender).Parent.Parent)
    {
        Integer idx = row.RowIndex + 1;
        if (idx < gridView1.Rows.Count) {
            GridViewRow theRow = gridView1.Rows[idx];
            //string myvar = row.Cells[0].Text;
            string myvar = theRow.Cells[0].Text;
        }