2011-10-05 78 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]),但我认为你应该得到的东西该小区的(必须发挥它)最有可能失败。它也可能是一个不好的绑定模式。