Форум программистов, компьютерный форум CyberForum.ru

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 223, средняя оценка - 4.96
Петррр
5939 / 3376 / 335
Регистрация: 28.10.2010
Сообщений: 5,926
#1

FAQ по ADO.NET - C#

15.08.2011, 16:09. Просмотров 29485. Ответов 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.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2011, 16:09     FAQ по ADO.NET
Посмотрите здесь:

ADO.NET и Excel C#
Что такое ADO.NET? C#
C# ADO.NET and TreeView
C# ado.net в vs 2008
Книги по ADO.NET C#
Книги по ADO .NET(C#) C#
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net C#
C# библиотека ado.net
C# Информация по ADO.NET
Отличия ADO.NET'03 и ADO.NET'05 C#
Потокобезопасность ADO.net C#
C# Классический ado.net

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Закрытая тема Создать тему
Опции темы

Текущее время: 15:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru