Как определить строку DataGrid для удаления? - PullRequest
0 голосов
/ 08 января 2020

Я сейчас переписываю старый скрипт на VB. net в C#. У меня есть DataGrid и кнопка Удалить в каждой строке. Я хочу передать данный Id (KeyphraseToBrandId) в OnDeleteCommand, чтобы удалить эту строку в базе данных. У меня проблемы с определением этого ряда.

Вот мой MyDataGrid_DeleteCommand, который показывает все, что я пробовал, которые не работали, в качестве комментариев:

protected void MyDataGrid_DeleteCommand(object source, DataGridCommandEventArgs e)
{

    String connStr = ConfigurationSettings.AppSettings["ConnectionString"];

    // Define db connection
    MySqlConnection conn = new MySqlConnection(connStr);

    String DeleteSql = "DELETE from KeyphrasesToBrands WHERE KeyphraseToBrandId=?KeyphraseToBrandId";

    MySqlCommand DeleteCommand = new MySqlCommand(DeleteSql, conn);

    // DeleteCommand.Parameters.Add("?KeyphraseToBrandId", MyDataGrid.DataKeys(CInt(E.Item.ItemIndex)));

// This works for Id 8, so it's not the rest of the code        
// DeleteCommand.Parameters.Add("?KeyphraseToBrandId", "8");

    // DeleteCommand.Parameters.Add("?KeyphraseToBrandId", MyDataGrid.SelectedDataKey.Value.ToString());

    // DeleteCommand.Parameters.Add("?KeyphraseToBrandId", MyDataGrid.DataKeys.Equals(e.Item.ItemIndex));

    // DeleteCommand.Parameters.Add("?KeyphraseToBrandId", e.Item.ItemIndex.ToString());

    // DeleteCommand.Parameters.Add("?KeyphraseToBrandId", e.Item.ItemIndex);

        // DeleteCommand.Parameters.Add("?KeyphraseToBrandId", e.CommandArgument.ToString());

        // DeleteCommand.Parameters.Add("?KeyphraseToBrandId", e.Item.Cells[0].ToString());

        DeleteCommand.Parameters.Add("?KeyphraseToBrandId", e.CommandArgument);

        DeleteCommand.Connection.Open();

        DeleteCommand.ExecuteNonQuery();

        BindGrid();

        DeleteCommand.Connection.Close();

    }

... и вот мой DataGrid:

<asp:DataGrid ID="MyDataGrid" runat="server" DataKeyField="KeyphraseToBrandId" OnCancelCommand="MyDataGrid_CancelCommand" OnDeleteCommand="MyDataGrid_DeleteCommand" OnSelectedIndexChanged="MyDataGrid_SelectedIndexChanged" AutoGenerateColumns="false">

    <Columns>

            <asp:BoundColumn DataField="KeyphraseText" HeaderText="Keyphrase Text"></asp:BoundColumn> 

            <asp:BoundColumn DataField="BrandName" HeaderText="Brand Name"></asp:BoundColumn>

            <asp:BoundColumn DataField="KeyphraseToBrandId" HeaderText="Keyphrase To Brand Id"></asp:BoundColumn>

            <asp:ButtonColumn ButtonType="PushButton" Text="Delete" CommandName="Delete" HeaderText="Delete?" />

    </Columns>

</asp:DataGrid>

Как передать KeyphraseBrandId в команду удаления, чтобы идентифицировать эту строку для удаления в базе данных?

Спасибо

1 Ответ

0 голосов
/ 08 января 2020

Если вы хотите удалить массовые выбранные строки, тогда вы можете сделать это

foreach (DataGridViewRow row  in yourDataGridView.SelectedRows)
{    
     yourDataGridView.Rows.RemoveAt(row.Index);
}

Это работа по поиску индекса (Идентификация перечисленных строк в DataGrid). Он удаляет строки временно. Если вы хотите удалить данные из самой базы данных, вам нужно получить идентификатор идентификатора из строки и удалить его или изменить активный статус согласно вашему требованию.

...