Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Стандартный проект (иерархическая структура выборка и удаление) / 1 сообщений из 1, страница 1 из 1
13.09.2007, 00:23
    #34796173
dereyly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стандартный проект (иерархическая структура выборка и удаление)
Слезливое вступление:
Я делаю проект на C# (создание заказа, счета, отчеты, документооборот) и сам бог велел делать через ADO.Net но чет не получается
ТЗ:
Есть иерахическая таблица (id,name,parent_id) отображается через TreeView (работает)
Есть таблица товаров (id_tovar,bla-bla-bla,id), каждый товар лежит в каталоге
Есть таблица шаблонов товаров (id_shablon,bla-bla-идф,id)
Есть процедура выбора всех дочерних элементов
Нужно по клику на дереве выбрать все дочерние элементы и отобразить это в DataGrid
Нужно добавить элемент из шаблона в таблицу товаров, чтобы изменения сохранились на сервере
Нужно показывать изменения в иерархии для всех клиентов

Вопрос: Есть ли подобные проекты или части как это реализовать

Вопросы и проблемы:
1) Как обновить dataGridView (или DataSet надо обнавлять пробел в знаниях)

Куча дурного кода:
Пробовал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 private void Form1_Load(object sender, EventArgs e)
        {
            ds=new DataSet();
            adapter = new System.Data.SqlClient.SqlDataAdapter("dbo.proc_derevo", cn);
            adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            adapter.SelectCommand.Parameters.Add(new System.Data.SqlClient.SqlParameter("@id",    SqlDbType.Int));
            adapter.SelectCommand.Parameters["@id"].Value =  1 ;
   adapter.Fill(ds, "Tovar");
          
            dataGridView1.DataSource = ds.Tables["Tovar"].DefaultView;
        }
На этапе инициализаци если поставить не 1 а другой элемент то он правильно считает
Обновление:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            string str;
            int id;
           //тут на клиенте я храню id в текстовой форме
            str=treeView1.SelectedNode.Name;
            id = Convert.ToInt32(str); 
            adapter.SelectCommand.Parameters["@id"].Value = id;
            dataGridView1.Refresh();
        }

SQL-- на серваке работает (Microsoft SQL Manager)
Код: plaintext
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.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
drop PROCEDURE proc_derevo
GO
CREATE PROCEDURE proc_derevo
(
	@id int
)
AS
BEGIN
	SET NOCOUNT ON;
	with cte([id_razdel],[id_parent_razdel],[Name])
	as
	(
	select a.[id_razdel],a.[id_parent_razdel],a.[Name]
	from [oks].[dbo].[Razdel] a
	where a.[id_razdel]=@id
	union all
	select a.[id_razdel],a.[id_parent_razdel],a.[Name]
	from [oks].[dbo].[Razdel] a
	inner join
	cte b
	on b.[id_razdel]=a.[id_parent_razdel]
	)
	select c.*
	from cte b
	inner join
	[oks].[dbo].[Tovar] c
	on b.[id_razdel]=c.[id_razdel];
END
GO

Второй способ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 private void RetriveData(int id)
        {
            String sqlstr;
            sqlstr = "select * from [Tovar]  where id_razdel=" + id.ToString();
            adapter = new System.Data.SqlClient.SqlDataAdapter(sqlstr, cn);
            ds.Clear();
            adapter.Fill(ds);
            dataGridView1.DataSource = ds.Tables["Tovar"].DefaultView;
        }
Как уже говорилось: dataGridView не МЕНЯЕТСЯ

Проблема №2:
не могу добавить из шаблона в товар. id_tovar -- индекс с автоинкрементом
но даже когда я его отключил все равно не получилось отправить данные на сервак
вопрос на сервере нужно ли писать SQL команды для Update и Insert если я пользуюсь автосгенерированным адаптером
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private void добавитьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DataRow workRow = null;
            workRow = oksDataSet.Tovar.NewRow();
            foreach(System.Windows.Forms.DataGridViewRow dRow in dataGridView1.SelectedRows)
            {
                workRow[ 0 ] =  690 ;
                workRow[ 1 ] = dRow.Cells[ 0 ].Value;
                workRow[ 2 ] = dRow.Cells[ 2 ].Value;
                oksDataSet.Tovar.Rows.Add(workRow);
            }
       }
Ничего не происходит ни в DataGridView ни на Сервере
2й способ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 private void добавитьToolStripMenuItem_Click(object sender, EventArgs e)
        {

            foreach(System.Windows.Forms.DataGridViewRow dRow in dataGridView1.SelectedRows)
            {
                String sqlstr;
                sqlstr="INSERT INTO [Tovar] ";
                sqlstr+="( [Name] , [Ed_izm] ) VALUES ";
                sqlstr+="('"+dRow.Cells[0].Value.ToString()+"','"+ dRow.Cells[2].Value.ToString()+"')";
                sqlstr += " GO";
                System.Data.SqlClient.SqlCommand cmd = cn.CreateCommand();
                System.Data.SqlClient.SqlTransaction transaction;
                transaction = cn.BeginTransaction("SampleTransaction");
                try
                {
                    cmd.CommandText = sqlstr;
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                { }
            }
error: Недопустимая операция. Подключение закрыто.

Код: plaintext
1.
2.
cn.ConnectionString=
"Data Source=REYCOMPUTER\SQLEXPRESS;Initial Catalog=oks;Integrated Security=True;TrustServerCertificate=True;Context Connection=False"
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Стандартный проект (иерархическая структура выборка и удаление) / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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