Указание записей, подлежащих удалению из базы данных, с помощью метода TableAdapter.Update - PullRequest
1 голос
/ 01 августа 2010

Я уже давно этим занимаюсь, и это становится все менее и менее увлекательным;Я следовал руководству MSDN для удаления строки из сетки данных.И это работает для любой строки, однако я не могу указать строку ... по сути, я могу удалить случайные строки, используя параметр CurrentIndex, все, что я пытаюсь быть более конкретным, приводит к ошибкам преобразования.

В ореховой оболочке «FindByID» (мой первичный ключ) выдает мне ошибки «объект на длинные» и т. Д. Не могу найти строку, которую я хочу удалить.

    //int ThisRow = radGridView1.CurrentIndex.Value;

    // Locate row for deletion
    VSConnectorDataSet.TestTableRow oldTestTableRow;
    oldTestTableRow = vSConnectorDataSet.TestTable.FindByID(
                      Int64.Parse(radGridView1.CurrentRow.Cells["ID"].Value));
    // Delete the row from the dataset
    oldTestTableRow.Delete();

    // Delete from database
    this.testTableTableAdapter1.Update(this.vSConnectorDataSet.TestTable);

    //DataRow rowDel=vSConnectorDataSet.TestTable.Rows[ThisRow];
    //rowDel.Delete();
    //testTableTableAdapter1.Update(vSConnectorDataSet);

Ответы [ 2 ]

0 голосов
/ 02 августа 2010

Обнаружив, как Convert.ToInt64, я теперь могу нацелить мою удаленную строку с помощью метода привязанного набора данных-tableadapter-database.

private void DeleteToolStripButton_Click(object sender, EventArgs e)
{
    long ThisRow = Convert.ToInt64((radGridView1.CurrentRow.Cells["ID"].Value));
    DialogResult DelEntry = MessageBox.Show("Do you want to delete the entry titled '" + radGridView1.CurrentRow.Cells["SparesTitle"].Value + "'?", "Delete this entry?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
    switch (DelEntry)
    {
        case DialogResult.OK:
            // Locate row for deletion
            VSConnectorDataSet.TestTableRow oldTestTableRow;
            oldTestTableRow = vSConnectorDataSet.TestTable.FindByID(ThisRow);
            // Delete the row from the dataset
            oldTestTableRow.Delete();
            // Delete from database
            this.testTableTableAdapter1.Update(this.vSConnectorDataSet.TestTable);
            break;
            //
            // To Do - Give Slected to another row; having just deleted our 'CurrentRow'
            //
        case DialogResult.Cancel:
            break;
    }
}
0 голосов
/ 01 августа 2010

Int64.Parse принимает только строку. Возможно попробуйте:

long selRowVal = (long)radGridView1.CurrentRow.Cells["ID"].Value;
oldTestTableRow = vSConnectorDataSet.TestTable.FindByID(selRowVal);

или

Int64.Parse(radGridView1.CurrentRow.Cells["ID"].Value.ToString());

Непонятно, какой тип данных Cell.Value. Возможно, явное приведение может помочь.

...