Как удалить строку в виде сетки и базовый источник данных без использования SqlDataSource, ObjectDataSource и т. Д.

StackOverflow https://stackoverflow.com/questions/813168

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть 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) + "';
        }

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top