我在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
答案 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中的数据(会话,视图状态,或者您没有这样做?)。由于您具有选定的行索引,因此您只需要再次获取数据源。如果你在会话中持久化,那么你可以获得该会话对象并在用户选择的索引处找到对象。