2011-10-05 81 views
1

獲得從選定的行值我添加了一個GridView控件上我的ASP.net網頁和數據其綁定到List<>列表中包含一個簡單的自定義對象的集合,其定義如:ASP.NET:如何從GridView控件

public class PersonRecord 
{ 
    public int PersonId { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public string Notes { get; set; } 
} 

我已經設置AutoGenerateSelectButton爲true,並附加一個事件處理程序的SelectedIndexChanged事件。我可以看到我的事件處理程序觸發,我可以通過使用MyGridView.SelectedIndex來獲取選定的行索引。

我的問題是:我如何使用選定的行索引來獲取所選記錄的PersonId?

我想MyGridView.Rows[MyGridView.SelectedIndex].Cells[0]會做,但它並沒有因爲MyGridView.Rows.Count爲0

TIA

+0

IF MyGridView.Rows.Count是0就意味着沒有在網格視圖的數據。首先綁定gridview的,那麼你可以使用獲得的數據「MyGridView.Rows [MyGridView.SelectedIndex] .Cells [0]。文本」 –

+0

他將無法使用選擇按鈕,如果最初沒有約束。不知道之後會發生什麼,因爲這裏沒有代碼。 –

+0

確保你是不是抹在頁面加載你的GridView你打你的事件處理程序(如果使用(!的IsPostBack))之前 –

回答

1

你是如何存儲在服務器上,從你的GridView的數據(會話視圖狀態,或者你不這樣做?)。既然你有選定的行索引,你只需要再次獲取你的數據源。如果你將它保存在會話中,那麼你可以獲得該會話對象並在用戶選擇的索引處找到該對象。

+0

我沒有堅持,但我認爲這是可行的。我認爲我能夠通過GridView獲取數據。 – millie

2

只是因爲我還沒有在一段時間與Web應用程序打,我決定去看看,如果這是我可以欺騙。唉,無濟於事。這對我來說工作得很好:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!Page.IsPostBack) 
     { 
      var persons = CreatePersons(); 
      GridView1.DataSource = persons; 
      GridView1.DataBind(); 
     } 
    } 

    private List<PersonRecord> CreatePersons() 
    { 
     var person = new PersonRecord 
         { 
          PersonId = 1, 
          Name = "greg", 
          Title = "Supreme Coder", 
          Description = "Nada", 
          Notes = "foo bar" 
         }; 

     var person2 = new PersonRecord 
     { 
      PersonId = 2, 
      Name = "Sam", 
      Title = "Junior Coder", 
      Description = "Nada", 
      Notes = "foo bar" 
     }; 

     var list = new List<PersonRecord> {person, person2}; 

     return list; 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     var row = GridView1.Rows[0]; 
     var cell = row.Cells[1]; 
     var value = cell.Text; 


    } 

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     int index = GridView1.SelectedIndex; 
     var row = GridView1.Rows[index]; 
     var nameCell = row.Cells[2]; 
     var name = nameCell.Text; 

     Label1.Text = name; 
    } 
} 

你的一樣,你是選擇選擇列(單元[0]),但我認爲你應該得到的東西該小區的(必須發揮它)最有可能失敗。它也可能是一個不好的綁定模式。