Как удалить строку в виде сетки и базовый источник данных без использования SqlDataSource, ObjectDataSource и т. Д.
Вопрос
У меня есть GridView, который я заполняю, вызывая метод для возврата таблицы данных с двумя столбцами. После того, как я возвращаю таблицу данных, я связываю ее с сеткой и показываю ее.
Я не использую SqlDataSource или ObjectDataSource, поэтому каков правильный способ удаления строки из сетки и базовых данных в базе данных. Мне просто нужно удалить из одной таблицы, которая называется портфолио. Он имеет 3 столбца, ID, который является уникальным ключом, PortfolioID и PortfolioName. Datatable возвращает имя портфолио и количество элементов в портфолио. Я думал, что смогу сделать это в событии Row_Deleting, где я сделаю что-то вроде:
DELETE * FROM Portfolio WHERE PortfolioID = @PortfolioID
Я на правильном пути и как мне это сделать? Могу ли я привязать PortfolioID к свойству GridView DataKey (какой правильный синтаксис для этого?)
Решение
Я предполагаю, что вы удаляете строку нажатием кнопки. Если так, я обычно делаю что-то вроде этого:
<asp:GridView ID="myGrid" runat="server" DataKeyNames='PortfolioID' OnRowCommand="dgStudent_RowCommand">
<Columns>
<asp:ButtonField ButtonType="Button" CommandName="Delete" Text="Delete"></asp:ButtonField>
</Columns>
</asp:GridView>
Тогда в вашем коде позади:
protected void myGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
// create and open DB connection
int PortfolioID = (int)myGrid.DataKeys[Convert.ToInt32(e.CommandArgument)].Value;
DeleteRow(PortfolioID); // your implementation
myGrid.DataBind();
}
DeleteRow
- ваша реализация удаления строки (возможно, SQL, который вы использовали выше). myGrid - это ваша сетка. PortfolioID
является первичным ключом. Это также предполагает, что единственная кнопка в вашей сетке - кнопка удаления. Если у вас более одной кнопки, вам нужно проверить e.CommandName == " Удалить "
, чтобы убедиться, что вы получили кнопку удаления.
Другие советы
Вероятно, я бы абстрагировал вызов БД дальше, чем там. Я вероятно обработал бы строки после того, как изменения строки были закончены. Для постобработки вы можете проверить состояние строки, чтобы определить, что делать с данными в строке.
Как я понял, вы хотите удалить строку из представления таблицы данных, которая хранится в таблице базы данных. Это означает, что вы хотите удалить таблицу и запись из некоторой базы данных. Лучший способ сделать это - поместить текстовое поле куда-нибудь и создать событие для вашей таблицы данных (в событии выбора строки). Таким образом, когда вы выберете строку, которую хотите удалить, идентификатор этой строки будет отправлен в текстовое поле (это будет закодировано). После того, как у вас есть идентификатор строки, которую вы хотите удалить, просто добавьте еще одну кнопку, чтобы удалить запись в базе данных и еще раз связать сетку данных. Р>
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
this.txt_portfolioId.Text=dataGridView1.CurrentRow.Cells["portfolioID"].Value.ToString();
}
private void btn_Delete(object sender, EventArgs e)
{
//You need to connect to database(regular database connection this connection string and sqlcommand and add this sqlquerry:
Удалить * из вашей таблицы, где portfolioid = '" + Convert.ToInt32 (this.portfolioId.Text) + "';
} Р>