2014-03-06 68 views
2

我想從我的嵌套Gridview中使用鏈接按鈕從父Gridview中獲取ID,但我每次都獲得不同的ID我點擊鏈接。例如,如果我點擊了25的鏈接ID,我得到了ID 24的值,或者如果我點擊了ID#18的鏈接,那麼我得到ID#17的值,等等......所以它總是減一。所以如何我可以增加我的行ID,如果我有row.Cells [0]我想顯示row.Cells [0] + 1這樣的事情。我只需要某種解決方案,請幫助。這裏是我的代碼:如何從父Gridview使用C#獲取價值

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); 
    } 

回答

0

This?

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; 
     } 
+0

Jumpei,你的解決方案工作..但只有當我在父Gridview中有多個行,這意味着如果我有2,3或更多行它工作正常,但是當我只有一個行然後它不工作,我得到這個錯誤:「索引超出範圍,必須是非負數,小於集合的大小 參數名稱:索引」請幫助我快到了。謝謝 – moe

+0

檢查上面的行數。我已經更新了答案。 – Jumpei

0

您應該在您的GridView定義中包含DataKeyNames。

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

然後在代碼隱藏,你可以找回:

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

    string myvar = gridview1.DataKeys[row.RowIndex].ToString(); 

    ... 
} 
+0

瑞克,我已經在我的gridview中包含datakey,但我使用的是稍微不同於你提出的解決方案。我正在使用Gridview父級訪問ID,我如何修改我的代碼才能使用數據鍵?謝謝 – moe

+0

我已經更新了我的答案。但是,我不確定您獲得該行的解決方案是否100%正確。給它去看看會發生什麼。 –

+0

我已經嘗試過,但沒有工作... – moe

2

你可以試試NamingContainer屬性。

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

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

} 
+0

Unnie,我試過這個,但沒有工作。我已經更新了我的初始帖子,請看看它。我正在動態添加空行,並且這些行用於在GridView中進行搜索。也許這就是爲什麼我有這些問題。謝謝 – moe