ASP.NET: как получить значения из выбранной строки из элемента управления GridView - PullRequest
1 голос
/ 05 октября 2011

Я добавил элемент управления GridView на мою веб-страницу ASP.net и данные связали его с 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 ]

2 голосов
/ 05 октября 2011

Только потому, что я некоторое время не играл с веб-приложениями, я решил посмотреть, смогу ли я обмануть это. Увы, безрезультатно. Это прекрасно работает для меня:

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]), но я думаю, что вы должны извлечь что-то из этой ячейки (придется поиграть с ней). Это также может быть плохой шаблон для привязки.

1 голос
/ 05 октября 2011

Как вы храните данные из вашего GridView на сервере (сеанс, viewstate или вы этого не делаете?).Поскольку у вас есть выбранный индекс строки, вам просто нужно снова получить ваш источник данных.Если вы сохраните его в сеансе, то вы можете просто получить этот объект сеанса и найти объект по индексу, выбранному пользователем.

...