Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DataGridView удаление строки. / 8 сообщений из 8, страница 1 из 1
15.04.2015, 09:56
    #38936795
ОлегБаш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGridView удаление строки.
Добрый день.

Неделю бодаюсь с проблемой.

На форме разместил DataGridView и привязал к ней базу .sdf Также на форме есть BindingNavigator, table AdapterManager,BindingSourse стандартные элементы для таблицы. Проблема в том когда жмакаю на кнопку удалить запись удаляется, но при Refresh запись снова есть. При этом ексепшн выдает, что для Update нужна действительно Delete команда.

часть кода для удаления:

private void button_Delete_Click(object sender, EventArgs e)
{

try
{
DialogResult dialog = new DialogResult();
dialog = MessageBox.Show("Вы пытаетесь удалить запись","Message",MessageBoxButtons.OK,MessageBoxIcon.Question);
if (dialog == DialogResult.OK)
{
this.phoneBaseBindingSource.RemoveCurrent();
this. phoneBaseDataGridView.RowsRemoved+=new DataGridViewRowsRemovedEventHandler(phoneBaseDataGridView_RowsRemoved);

}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Подскажите что не так. В гриде на чекбоксе стоит галочка разрешение удаления.

Спасибо.
...
Рейтинг: 0 / 0
15.04.2015, 11:14
    #38936877
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGridView удаление строки.
...
Рейтинг: 0 / 0
15.04.2015, 18:23
    #38937607
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGridView удаление строки.
ОлегБаш,

А вы подключили к DataTable событие RowDeleted?
А в dataTableAdapter команда DeleteCommand прописана?
...
Рейтинг: 0 / 0
17.04.2015, 11:52
    #38938995
ОлегБаш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGridView удаление строки.
Cat2,
Спасибо за ответ.
Строки удаляются но после очередного запуска тестирования они опять есть. То что вы предлагаете уже пробовал.
Во код. Но при рефреше данные после удаления не сохраняются. Так как в проекте локальная база то я так понимаю нет необходимости подключать SqlCeCommand,DataTable и так далее так как это уже было создано в BindingNavigator. С удалением строк вполне справляется RemoveCurrent.
Если есть идеи буду очень благодарен.

Для элемента Update требуется действительный DeleteCommand при передаче коллекции DataRow с удаленными строками. Это строка ексепшина когда пытаюсь рефрешить.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;

namespace Телефонный_справочник
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}
DataSet ds = new DataSet("PhoneBase.sdf");
private void phoneBaseBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.phoneBaseBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.phoneBaseDataSet1);

}

private void Form1_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "phoneBaseDataSet1.PhoneBase". При необходимости она может быть перемещена или удалена.
this.phoneBaseTableAdapter.Fill(this.phoneBaseDataSet1.PhoneBase);
timer1.Start();

dateTimePicker1.CustomFormat = "MMMM dd, yyyy - dddd";
dateTimePicker1.Format = DateTimePickerFormat.Custom;

for (int i = 0; i <= phoneBaseDataGridView.RowCount; i++)
{
phoneBaseDataGridView.Rows[i].Cells[12].Value = dateTimePicker1.Value;
}
}
int count = 0;
private void timer1_Tick(object sender, EventArgs e)
{
count = phoneBaseBindingSource.Count;
label1.Text = "Количество записей в базе: " + count.ToString();
if (count < 2)
groupBox3.Visible = false;
else
groupBox3.Visible = true;
}

private void button_Add_Click(object sender, EventArgs e)
{
phoneBaseBindingSource.AddNew();
}

private void button_Save_Click(object sender, EventArgs e)
{
this.Validate();
this.phoneBaseBindingSource.EndEdit();
}

private void button_Delete_Click(object sender, EventArgs e)
{

try
{
DialogResult dialog = new DialogResult();
dialog = MessageBox.Show("Вы пытаетесь удалить запись", "Message", MessageBoxButtons.OK, MessageBoxIcon.Question);
if (dialog == DialogResult.OK)
{
this.phoneBaseBindingSource.RemoveCurrent();
}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button_Refresh_Click(object sender, EventArgs e)
{
tableAdapterManager.UpdateAll(this.phoneBaseDataGridView.);
}
...
Рейтинг: 0 / 0
17.04.2015, 12:15
    #38939034
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGridView удаление строки.
ОлегБаш, Вы не читаете то что вам пишут... или не понимаете вопросов...
Совет - вставьте строку сообщения об ошибке в поиск google ( А в dataTableAdapter команда DeleteCommand прописана? )
Как заработает, не забудьте посмотреть свойства вашего sdf'а... если он добавлен в проект... (Copy to output directory)
...
Рейтинг: 0 / 0
17.04.2015, 17:19
    #38939535
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGridView удаление строки.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
[quote ОлегБаш]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;

namespace Телефонный_справочник
{
    public partial class Form1 : Form
    {
         public Form1()
        {
            InitializeComponent();
       
        }
        DataSet ds = new DataSet("PhoneBase.sdf");
        private void phoneBaseBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.phoneBaseBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.phoneBaseDataSet1); 
phoneBaseDataSet1.PhoneBaseRowDeleted += PhoneBase_RowDeletedUpdated;phoneBaseDataSet1.PhoneBaseRowUpdated += PhoneBase_RowDeletedUpdated;


        }
void PhoneBase_RowDeletedUpdated (object sender, DataRowChangeEventArg e){this.phoneBaseTableAdapter.Update(this.phoneBaseDataSet1.PhoneBase);}

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "phoneBaseDataSet1.PhoneBase". При необходимости она может быть перемещена или удалена.
            this.phoneBaseTableAdapter.Fill(this.phoneBaseDataSet1.PhoneBase);
            timer1.Start();

            dateTimePicker1.CustomFormat = "MMMM dd, yyyy - dddd";
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
                
            for (int i = 0; i <= phoneBaseDataGridView.RowCount; i++)
            {
                phoneBaseDataGridView.Rows[i].Cells[12].Value = dateTimePicker1.Value;
            }
        }
        int count = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            count = phoneBaseBindingSource.Count;
            label1.Text = "Количество записей в базе: " + count.ToString();
            if (count < 2)
                groupBox3.Visible = false;
            else
                groupBox3.Visible = true;
        }

        private void button_Add_Click(object sender, EventArgs e)
        {
            phoneBaseBindingSource.AddNew();
        }

        private void button_Save_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.phoneBaseBindingSource.EndEdit();
        }

        private void button_Delete_Click(object sender, EventArgs e)
        {

            try
            {
                DialogResult dialog = new DialogResult();
                dialog = MessageBox.Show("Вы пытаетесь удалить запись", "Message", MessageBoxButtons.OK, MessageBoxIcon.Question);
                if (dialog == DialogResult.OK)
                {
                    this.phoneBaseBindingSource.RemoveCurrent();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void button_Refresh_Click(object sender, EventArgs e)
        {
            tableAdapterManager.UpdateAll(this.phoneBaseDataGridView.); 
        }[/quote]
...
Рейтинг: 0 / 0
17.04.2015, 18:31
    #38939598
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGridView удаление строки.
Не туда воткнулю Хотя это проблемы не решит, просто так должно быть

Cat2
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;

namespace Телефонный_справочник
{
    public partial class Form1 : Form
    {
         public Form1()
        {
            InitializeComponent();
       
        }
        DataSet ds = new DataSet("PhoneBase.sdf");
        private void phoneBaseBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.phoneBaseBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.phoneBaseDataSet1); 



        }
void PhoneBase_RowDeletedUpdated (object sender, DataRowChangeEventArg e){this.phoneBaseTableAdapter.Update(this.phoneBaseDataSet1.PhoneBase);}

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "phoneBaseDataSet1.PhoneBase". При необходимости она может быть перемещена или удалена.
            this.phoneBaseTableAdapter.Fill(this.phoneBaseDataSet1.PhoneBase);
            timer1.Start();

            dateTimePicker1.CustomFormat = "MMMM dd, yyyy - dddd";
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
                
            for (int i = 0; i <= phoneBaseDataGridView.RowCount; i++)
            {
                phoneBaseDataGridView.Rows[i].Cells[12].Value = dateTimePicker1.Value;
            }

phoneBaseDataSet1.PhoneBaseRowDeleted += PhoneBase_RowDeletedUpdated;phoneBaseDataSet1.PhoneBaseRowUpdated += PhoneBase_RowDeletedUpdated;
        }
        int count = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            count = phoneBaseBindingSource.Count;
            label1.Text = "Количество записей в базе: " + count.ToString();
            if (count < 2)
                groupBox3.Visible = false;
            else
                groupBox3.Visible = true;
        }

        private void button_Add_Click(object sender, EventArgs e)
        {
            phoneBaseBindingSource.AddNew();
        }

        private void button_Save_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.phoneBaseBindingSource.EndEdit();
        }

        private void button_Delete_Click(object sender, EventArgs e)
        {

            try
            {
                DialogResult dialog = new DialogResult();
                dialog = MessageBox.Show("Вы пытаетесь удалить запись", "Message", MessageBoxButtons.OK, MessageBoxIcon.Question);
                if (dialog == DialogResult.OK)
                {
                    this.phoneBaseBindingSource.RemoveCurrent();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void button_Refresh_Click(object sender, EventArgs e)
        {
            tableAdapterManager.UpdateAll(this.phoneBaseDataGridView.); 
        }
...
Рейтинг: 0 / 0
20.04.2015, 15:02
    #38940684
ОлегБаш
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DataGridView удаление строки.
Всем спасибо за советы. По новой создал все приложение и заработало. По видимому что то криво стояло или прописалось в дизайнере.
Cat2Не туда воткнулю Хотя это проблемы не решит, просто так должно быть

Cat2
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;

namespace Телефонный_справочник
{
    public partial class Form1 : Form
    {
         public Form1()
        {
            InitializeComponent();
       
        }
        DataSet ds = new DataSet("PhoneBase.sdf");
        private void phoneBaseBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.phoneBaseBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.phoneBaseDataSet1); 



        }
void PhoneBase_RowDeletedUpdated (object sender, DataRowChangeEventArg e){this.phoneBaseTableAdapter.Update(this.phoneBaseDataSet1.PhoneBase);}

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "phoneBaseDataSet1.PhoneBase". При необходимости она может быть перемещена или удалена.
            this.phoneBaseTableAdapter.Fill(this.phoneBaseDataSet1.PhoneBase);
            timer1.Start();

            dateTimePicker1.CustomFormat = "MMMM dd, yyyy - dddd";
            dateTimePicker1.Format = DateTimePickerFormat.Custom;
                
            for (int i = 0; i <= phoneBaseDataGridView.RowCount; i++)
            {
                phoneBaseDataGridView.Rows[i].Cells[12].Value = dateTimePicker1.Value;
            }

phoneBaseDataSet1.PhoneBaseRowDeleted += PhoneBase_RowDeletedUpdated;phoneBaseDataSet1.PhoneBaseRowUpdated += PhoneBase_RowDeletedUpdated;
        }
        int count = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            count = phoneBaseBindingSource.Count;
            label1.Text = "Количество записей в базе: " + count.ToString();
            if (count < 2)
                groupBox3.Visible = false;
            else
                groupBox3.Visible = true;
        }

        private void button_Add_Click(object sender, EventArgs e)
        {
            phoneBaseBindingSource.AddNew();
        }

        private void button_Save_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.phoneBaseBindingSource.EndEdit();
        }

        private void button_Delete_Click(object sender, EventArgs e)
        {

            try
            {
                DialogResult dialog = new DialogResult();
                dialog = MessageBox.Show("Вы пытаетесь удалить запись", "Message", MessageBoxButtons.OK, MessageBoxIcon.Question);
                if (dialog == DialogResult.OK)
                {
                    this.phoneBaseBindingSource.RemoveCurrent();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void button_Refresh_Click(object sender, EventArgs e)
        {
            tableAdapterManager.UpdateAll(this.phoneBaseDataGridView.); 
        }
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / DataGridView удаление строки. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]