Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Подскажите как связать две таблицы


Автор: Doss 20.11.2007, 13:26
Помогите всязать две таблицы, работаю в 2005 Studio, в 2003 идет и в моем нет? Кажется что то с DATAGrid...! Помогите если можно с примером...спосибо!!!!


Код
 public partial class Form1 : Form
    {
        string ConnectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=""D:\Programs\Code на C# с диска (Разоаботка Windows приложений)\RBProduct.mdb"";User ID=Admin;Jet OLEDB:Encrypt Database=False";
        string commandText = @"SELECT [Адрес поставщика],[Код поставщика], Поставщик, Телефон FROM Поставщики";

        string commandText2 = @"SELECT [Код поставщика],[Код продукта], Наименование, [Цена,$] FROM Товары";
        public Form1()
        {
            InitializeComponent();
           
           
            //Соединение...
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = ConnectionString;
            conn.Open();

//==================================================================
            //SQL -запросы
            OleDbCommand myCommand = conn.CreateCommand();
            myCommand.CommandText = commandText;


            OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
            dataAdapter.SelectCommand = myCommand;
            DataSet ds = new DataSet();
            dataAdapter.TableMappings.Add("Table", "Поставщики");
            dataAdapter.Fill(ds);
            dataGridView1.DataSource = ds.Tables["Поставщики"].DefaultView;
            
//=================================================================
//Добавляю объект для второй таблицы(Товары)


           OleDbCommand myCommand2 = new OleDbCommand();
           myCommand2.Connection = conn;
           myCommand.CommandText = commandText2;
            
            
           OleDbDataAdapter dataAdapter2 = new OleDbDataAdapter();
           dataAdapter2.SelectCommand = myCommand2;
           dataAdapter2.TableMappings.Add("Table","Товары");
           dataAdapter2.Fill(ds);//Если все ниже коментирую все выходит...конечно без второй таблицы
            
            DataRelation dataRelation;
            DataColumn dataColumn1;
            DataColumn dataColumn2;
            dataColumn1 = ds.Tables["Поставщики"].Columns["Код поставщика"];
            dataColumn2 = ds.Tables["Товары"].Columns["Код поставщика"];
            dataRelation = new DataRelation("Товары этого поставщика", dataColumn1, dataColumn2);

            ds.Relations.Add(dataRelation );

            DataViewManager dsview = ds.DefaultViewManager;
            dataGridView1.DataSource = dsview;
            dataGridView1.DataMember = "Поставщики";
            conn.Close();
        }
    }


Автор: thomas 20.11.2007, 15:10
Doss
Приветствую.
А что собственно нужно получить в результате?
Отобразить в DataGridView товары конкретного поставщика?
Или отображать данные на поставщиков с применением навигации по записям и для выбранного поставщика отображать товары(в DataGridView)?

В первом случае использовать прямой запрос к БД с использованием JOIN.
Во втором BindingNavigator и BindingSource.(если работаем с дизайнером) Sql-команду с условием на выборку товаров для конкретного поставщика. При смене поставщиков применять Refresh() для DataGridView, выводящего товары на экран, а в ДатаСет удалять и создавать соответствующую табличку по новой.

Автор: Doss 21.11.2007, 00:15
Ну кто-нибудь......подскажите?

Автор: thomas 21.11.2007, 00:53
Doss
Что подсказать, то?  smile 
Связь в ДатаСет ты добавил. Код правильный.
Но вот для чего ты добавил эту связь совершенно не понятно.
Что ты хочешь этм сделать
Код

DataViewManager dsview = ds.DefaultViewManager;
dataGridView1.DataSource = dsview;
dataGridView1.DataMember = "Поставщики";

Ты и так своих поставщиков уже отобразил
Код

dataGridView1.DataSource = ds.Tables["Поставщики"].DefaultView;



Автор: Doss 22.11.2007, 14:32
НУ да, поставщиков то я отобразил, а если хочу отбразить товары конкретного поставщика, т.е если выбрал одного поставщика и хоу посмотреть коки у него товары, то кликаю на нем или возле него на + и выжу его товары на этой же форме...спосибо за содействие...

Автор: Gesha 26.11.2007, 10:15
Doss
Вариант №1
После клика на поставщике делать запрос по его ID и выводить его в таблицу

Вариант №2
Делать фильтр по датасету
Код

                DataGridViewТовары.DataSource = DataTableТовары;
                ((DataTable)DataGridViewТовары).DefaultView.RowFilter = "ID=" + IDПоставщика.ToString();


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)