ASP.NET - нет данных на событии Gridview RowDeleting! - PullRequest
4 голосов
/ 25 февраля 2009

У меня есть GridView просто так:

<asp:GridView ID="gvwStudents" runat="server" 
    AutoGenerateColumns="False" DataKeyNames="ID"
    ShowHeader="False" onrowdeleting="gvwStudents_RowDeleting">
    <Columns>
        <asp:BoundField DataField="FirstName" />
        <asp:BoundField DataField="LastName" />
        <asp:BoundField DataField="Email" />
        <asp:CommandField ShowDeleteButton="True" DeleteText="Remove" />
    </Columns>
</asp:GridView>

Вот как я создаю свой DataTable, с которым связан GridView, чтобы вы знали, с какими данными я имею дело:

private DataTable MakeStudentsTable()
{
    DataTable students = new DataTable();

    DataColumn ID = students.Columns.Add("ID", typeof(int));
    ID.AutoIncrement = true;

    DataColumn firstName = students.Columns.Add("FirstName", typeof(string));
    DataColumn lastName = students.Columns.Add("LastName", typeof(string));
    DataColumn email = students.Columns.Add("Email", typeof(string));


    return students;
}

Почему, о-о, почему в EventArgs события RowDeleting не передаются ключи? Мне нужно удалить запись из таблицы данных ADO.NET, которую я держу в состоянии сеанса при запуске этого события.

Почему это не работает? Неужели DataKeys работают только при использовании элемента управления DataSource?

Ответы [ 3 ]

8 голосов
/ 25 февраля 2009

Это работает:

private DataTable MakeStudentsTable()
{
    DataTable students = new DataTable();

    DataColumn ID = students.Columns.Add("ID", typeof(int));
    ID.AutoIncrement = true;

    DataColumn firstName = students.Columns.Add("FirstName", typeof(string));
    DataColumn lastName = students.Columns.Add("LastName", typeof(string));
    DataColumn email = students.Columns.Add("Email", typeof(string));

    DataRow student = students.NewRow();
    student["FirstName"] = "foo";
    student["LastName"] = "bar";
    student["Email"] = "foo@bar.com";
    students.Rows.Add(student);

    return students;
}

protected void gvwStudents_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    string id = this.gvwStudents.DataKeys[e.RowIndex].Value.ToString();   
}
1 голос
/ 02 сентября 2016

Установите для свойства DataKeyNames элемента управления GridView имена первичных ключей ваших данных.

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.datakeynames.aspx

0 голосов
/ 25 февраля 2009

добавить

<asp:BoundField DataField="ID" />

и посмотрите, имеет ли поле значение.

...