ASP.NET:如何从GridView控件中的选定行获取值

时间:2011-10-05 13:52:23

标签: c# asp.net gridview aspxgridview

我在ASP.net网页上添加了一个GridView控件,数据将其绑定到List<>该列表包含一组简单的自定义对象,定义为:

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

2 个答案:

答案 0 :(得分: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;
    }
}

你选择选择列(cell [0])时很可能会失败,但我认为你应该从这个单元格中获取一些东西(必须使用它)。它也可能是一种糟糕的绑定模式。

答案 1 :(得分:1)

如何在服务器上存储GridView中的数据(会话,视图状态,或者您没有这样做?)。由于您具有选定的行索引,因此您只需要再次获取数据源。如果你在会话中持久化,那么你可以获得该会话对象并在用户选择的索引处找到对象。