Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/193: Рейтинг темы: голосов - 193, средняя оценка - 4.50
Петррр
6163 / 3464 / 897
Регистрация: 28.10.2010
Сообщений: 5,928
1

FAQ по ADO.NET

15.08.2011, 16:09. Просмотров 35291. Ответов 0
Метки faq (Все метки)

Идея навеяна этой темой.
FAQ по ADO.NET
1. Как отобразить таблицу на второй форме в DataGridView?
В конструктор второй формы нужно передать BindingSource и задать его в качестве источника данных у 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
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace WindowsFormsApplication22
{
    public partial class Form1 : Form
    {
        SqlConnection connection;       
        SqlDataAdapter adapter;         
        BindingSource bindingSource;    
        DataSet dataSet;
 
        public Form1()
        {
            InitializeComponent();
            connection = new SqlConnection(@"Data Source=COMP\SQLEXPRESS;Initial Catalog=cyber;Integrated Security=True");
            adapter = new SqlDataAdapter("SELECT * FROM table1", connection);
            dataSet = new DataSet();
            adapter.Fill(dataSet, "table1");
            bindingSource = new BindingSource(dataSet, "table1");
            Button btn = new Button();
            btn.Text = "Show Form2";
            btn.Click += new EventHandler(btn_Click);
            this.Controls.Add(btn);
        }
 
        void btn_Click(object sender, EventArgs e)
        {
            //Передаем в конструктор BindingSource для таблицы
            new UseBindingSource(bindingSource).Show();
        }
    }
 
    class UseBindingSource: Form
    {
        DataGridView grid;
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="bindingSource">Источник данных для DataGridView</param>
        public UseBindingSource(BindingSource bindingSource)
        {
            grid = new DataGridView();
            this.Controls.Add(grid);
            grid.Dock = DockStyle.Fill;
            grid.DataSource = bindingSource;
        }
    }
}
2. В таблице имеется поле, в котором содиржится ссылка. Но в DataGridView отображется поле DataGridViewTextBoxColumn, а хотелось бы DataGridViewLinkColumn
Можно скрыть поле содержащее ссылку, потом добавить новое типа DataGridViewLinkColumn и задать в качестве источника данных поле, содержащее ссылку.
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
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace WindowsFormsApplication23
{
    public partial class Form1 : Form
    {
        SqlConnection connection;
        SqlDataAdapter adapter;
        BindingSource bindingSource;
        DataSet dataSet;
        DataGridView grid;
        
        public Form1()
        {
            InitializeComponent();
            connection = new SqlConnection(@"Data Source=COMP\SQLEXPRESS;Initial Catalog=cyber;Integrated Security=True");
            adapter = new SqlDataAdapter("SELECT * FROM UseLinks", connection);
            dataSet = new DataSet();
            adapter.Fill(dataSet, "UseLinks");
            bindingSource = new BindingSource(dataSet, "UseLinks");
            grid = new DataGridView();
            this.Controls.Add(grid);
            grid.Dock = DockStyle.Fill;
            this.Load += new EventHandler(Form1_Load);
            grid.DataSource = bindingSource;
        }
 
        void Form1_Load(object sender, EventArgs e)
        {
            grid.Columns["link"].Visible = false;
            DataGridViewLinkColumn linkColumn = new DataGridViewLinkColumn();
            linkColumn.DataPropertyName = "link";
            grid.Columns.Add(linkColumn);
        }
    }
}
3. В базе данных имеются две связанные таблицы. Нужно сделать что бы при выборе определенной записи в DataGridView, во второй DataGridView отображались все подчиненные записи.
У DataSet есть свойство Relations, через которое можно связать таблицы в наборе. Тогда у BindingSource подчиненной таблицы в качестве источника данных нужно установить BindingSource главной таблицы и название DataRelation. Для примера созданы две таблицы: группы и студенты. У таблицы студенты есть поле groupId - код группы.
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
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace WindowsFormsApplication24
{
    public partial class Form1 : Form
    {
        SqlConnection connection;
        SqlDataAdapter adapterGroups;
        SqlDataAdapter adapterStudents;
        DataSet dataSet;
        BindingSource bindingSourceGroups;
        BindingSource bindingSourceStudents;
        DataGridView gridGroups;
        DataGridView gridStudents;
 
        public Form1()
        {
            InitializeComponent();
            this.Size = new Size(500, 500);
            connection = new SqlConnection(@"Data Source=COMP\SQLEXPRESS;Initial Catalog=cyber;Integrated Security=True");
            adapterGroups = new SqlDataAdapter("SELECT id, name FROM groups;", connection);
            adapterStudents = new SqlDataAdapter("SELECT id, fio, idGroup FROM students", connection);
            dataSet = new DataSet();
            adapterGroups.Fill(dataSet, "groups");
            adapterStudents.Fill(dataSet, "students");
            dataSet.Relations.Add("groups-students", //название связи
                dataSet.Tables["groups"].Columns["id"],//первичный ключ главной таблицы
                dataSet.Tables["students"].Columns["idGroup"]);//внешний ключ подчиненной таблицы
            bindingSourceGroups = new BindingSource(dataSet, "groups");
            bindingSourceStudents = new BindingSource(bindingSourceGroups, "groups-students");
            gridGroups = new DataGridView();
            gridGroups.Size = new Size(this.ClientRectangle.Width - 20, (this.ClientRectangle.Height >> 1) - 15);
            gridGroups.Location = new Point(10, 10);
            gridGroups.DataSource = bindingSourceGroups;
            gridStudents = new DataGridView();
            gridStudents.Size = gridGroups.Size;
            gridStudents.Location = new Point(10, gridGroups.Bottom + 10);
            gridStudents.DataSource = bindingSourceStudents;
            this.Controls.AddRange(new Control[] { gridGroups, gridStudents });
        }
    }
}
4. Календарь в DataGridView.
39
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2011, 16:09
Ответы с готовыми решениями:

Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net
Всем привет! Нужно написать клиент-серверное приложение на основе Microsoft...

Отличия ADO.NET'03 и ADO.NET'05
Друзья, есть ли отличия в технологии ADO.NET для 2003 и для 2005, и насколько...

ado.net в vs 2008
Я так понял использовать asp.net ado.net в vs 2008 не получиться ?подскажите?...

библиотека ado.net
Вобщем такая задача: есть две таблицы в MySQL: 1 - &quot;Товар&quot; (ИД, название, цена...

Книги по ADO .NET(C#)
Здравствуйте! Может кто подсказать хорошую книгу по ADO .NET на русском языке,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2011, 16:09

ADO.NET и Excel
Может ли кто-нить помочь? Пытаюсь подключиться к файлу Excel через ADO....

Книги по ADO.NET
Может быть, пропустил такую тему и где-то уже было, но вот интересно знать ваше...

Классический ado.net
В каких проектах сейчас используются executescalar и executenonquery? Какие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru