Как удалить выбранный DataGridViewRow и обновить связанную таблицу базы данных?

У меня есть a DataGridView управление на приложении Windows Forms (записанный с C#).

То, в чем я нуждаюсь: когда пользователь выбирает DataGridViewRow и затем нажимает на кнопку 'Delete', строка должна быть удалена и затем, база данных должна быть обновлена с помощью адаптеров таблицы.

Это - то, что я имею до сих пор:

private void btnDelete_Click(object sender, EventArgs e)
{
    if (this.dataGridView1.SelectedRows.Count > 0)
    {
        dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index);
    }                
}

Кроме того, это только удаляет одну строку. Я хотел бы его, где пользователь может выбрать несколько строк.

46
задан Shin 8 November 2014 в 23:06
поделиться

3 ответа

Вот один очень простой пример:

ASPX:

<asp:GridView ID="gvTest" runat="server" SelectedRowStyle-BackColor="#996633" 
       SelectedRowStyle-ForeColor="Fuchsia">
    <Columns>
        <asp:CommandField ShowSelectButton="True" />
        <asp:TemplateField>
            <ItemTemplate>
                <%# Container.DataItemIndex + 1 %>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick="btnUpdateClick"/>

код позади:

public partial class _Default : System.Web.UI.Page
{
    private readonly DataTable _dataTable;

    public _Default()
    {
        _dataTable = new DataTable();

        _dataTable.Columns.Add("Serial", typeof (int));
        _dataTable.Columns.Add("Data", typeof (string));

        for (var i = 0; ++i <= 15;) 
        _dataTable.Rows.Add(new object[] {i, "This is row " + i});
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            BindData();
    }

    private void BindData()
    {
        gvTest.DataSource = _dataTable;
        gvTest.DataBind();
    }

    protected void btnUpdateClick(object sender, EventArgs e)
    {
        if (gvTest.SelectedIndex < 0) return;

        var r = gvTest.SelectedRow;

        var i = r.DataItemIndex;

        //you can get primary key or anyother column vlaue by 
        //accessing r.Cells collection, but for this simple case
        //we will use index of selected row in database.
        _dataTable.Rows.RemoveAt(i);

        //rebind with data
        BindData();

        //clear selection from grid
        gvTest.SelectedIndex = -1;
    }
}

Вам придется использовать флажки или какой-то другой механизм, чтобы позволить пользователям выбрать несколько строк, а затем Вы можете просматривать строки для проверки Checkbox, а затем удалите эти строки.

-3
ответ дан 26 November 2019 в 20:17
поделиться

Я написал следующий код, пожалуйста, посмотрите:

foreach (DataGridViewRow row in dataGridView1.SelectedRows)
    if (!row.IsNewRow) dataGridView1.Rows.Remove(row);

Использование индекса выбранной строки все еще может работать; Посмотрите, будет ли код ниже сделает трюк:

int selectedCount = dataGridView1.SelectedRows.Count;           
while (selectedCount > 0)
{
    if (!dataGridView1.SelectedRows[0].IsNewRow)
        dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
    selectedCount--;
}

Я надеюсь, что это поможет, считать.

10
ответ дан 26 November 2019 в 20:17
поделиться

Этот код удаляет выбранные элементы dataGridView1:

 private void btnDelete_Click(object sender, EventArgs e)
 {
     foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
     {
         dataGridView1.Rows.RemoveAt(item.Index);
     }
 }
71
ответ дан 26 November 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: