Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Vladimir_Mensk
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 26
1

DataGridView. Нельзя программным способом добавить в коллекцию строк, если контрол привязан к данным

02.04.2016, 08:32. Просмотров 2893. Ответов 4
Метки нет (Все метки)

Нуждаюсь в помощи.
Появляется ошибка "Строки нельзя программным способом добавить в коллекцию строк DataGridView, если элемент управления привязан к данным." в строке:
int n = dataGridView1.Rows.Add();
среда Visual studio 2010.


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
void ViewGrid()
        {
            Connection con = new Connection();
            SqlDataAdapter sda = new SqlDataAdapter("Select * From Profile", con.ActiveCon());
            DataTable dt = new DataTable();
            sda.Fill(dt);
            //dataGridView1.Rows.Clear();
            dataSet1.Clear();
            foreach (DataRow item in dt.Rows)
            {
                int n = dataGridView1.Rows.Add();
                dataGridView1.Rows[n].Cells[0].Value = (n + 1).ToString();
                dataGridView1.Rows[n].Cells[1].Value = item["id"].ToString();
                dataGridView1.Rows[n].Cells[2].Value = item["фамилия"].ToString();
                dataGridView1.Rows[n].Cells[3].Value = item["имя"].ToString();
                dataGridView1.Rows[n].Cells[4].Value = item["отчество"].ToString();
                dataGridView1.Rows[n].Cells[5].Value = item["тип_учреждения"].ToString();
                dataGridView1.Rows[n].Cells[6].Value = item["номер_учреждения"].ToString();
                dataGridView1.Rows[n].Cells[7].Value = item["отделение"].ToString();
                dataGridView1.Rows[n].Cells[8].Value = item["профессия"].ToString();
                
 
            }
        }
Кликните здесь для просмотра всего текста
Весь код:

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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.SqlClient;
 
namespace Diplom_Hospital
{
    public partial class New_profile : Form
    {
        public New_profile()
        {
            InitializeComponent();
        }
 
        private void Btn_New_Click(object sender, EventArgs e)
        {           
            CreateNew();
            ViewGrid();
            
        }
 
        private void Btn_Delete_Click(object sender, EventArgs e)
        {
            DeleteRecords();
            ViewGrid();
        }
 
        private void Btn_Save_Click(object sender, EventArgs e)
        {
            AddRecords();
            MessageBox.Show("Данные  сохранены успешно..!");
            CreateNew();
            ViewGrid();
        }
        //делает номер PF00001 + 1 при нажатии кнопри новый
        void CreateNew()
        {
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
            textBox4.Clear();
            comboBox1.SelectedIndex = -1;
            textBox6.Clear();
            comboBox2.SelectedIndex = -1;
            comboBox3.SelectedIndex = -1;
            
            Connection con = new Connection();
            SqlDataAdapter sda = new SqlDataAdapter("Proc_New_Profile", con.ActiveCon());
            sda.SelectCommand.CommandType = CommandType.StoredProcedure;
            DataTable dt = new DataTable();
            sda.Fill(dt);
            textBox1.Text = dt.Rows[0][0].ToString();
 
            textBox2.Focus();
        }
        //для кнопки сохранить
        void AddRecords()
        {
            Connection con = new Connection();
            SqlCommand cmd = new SqlCommand(@"INSERT INTO [dbo].[Profile]
           ([id]
           ,[фамилия]
           ,[имя]
           ,[отчество]
           ,[тип_учреждения]
           ,[номер_учреждения]
           ,[отделение]
           ,[профессия])
     VALUES
           ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + comboBox1.Text + "','" + textBox6.Text + "','" + comboBox2.Text + "','" + comboBox3.Text + "')", con.ActiveCon());
            cmd.ExecuteNonQuery();
        }
 
        private void New_profile_Load(object sender, EventArgs e)
        {
            CreateNew();
        }
 
        void ViewGrid()
        {
            Connection con = new Connection();
            SqlDataAdapter sda = new SqlDataAdapter("Select * From Profile", con.ActiveCon());
            DataTable dt = new DataTable();
            sda.Fill(dt);
            //dataGridView1.Rows.Clear();
            dataSet1.Clear();
            foreach (DataRow item in dt.Rows)
            {
                int n = dataGridView1.Rows.Add();
                dataGridView1.Rows[n].Cells[0].Value = (n + 1).ToString();
                dataGridView1.Rows[n].Cells[1].Value = item["id"].ToString();
                dataGridView1.Rows[n].Cells[2].Value = item["фамилия"].ToString();
                dataGridView1.Rows[n].Cells[3].Value = item["имя"].ToString();
                dataGridView1.Rows[n].Cells[4].Value = item["отчество"].ToString();
                dataGridView1.Rows[n].Cells[5].Value = item["тип_учреждения"].ToString();
                dataGridView1.Rows[n].Cells[6].Value = item["номер_учреждения"].ToString();
                dataGridView1.Rows[n].Cells[7].Value = item["отделение"].ToString();
                dataGridView1.Rows[n].Cells[8].Value = item["профессия"].ToString();
                
 
            }
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            int n = dataGridView1.SelectedRows[0].Index;
            textBox1.Text = dataGridView1.Rows[n].Cells[1].Value.ToString();
            textBox2.Text = dataGridView1.Rows[n].Cells[2].Value.ToString();
            textBox3.Text = dataGridView1.Rows[n].Cells[3].Value.ToString();
            textBox4.Text = dataGridView1.Rows[n].Cells[4].Value.ToString();
            comboBox1.Text = dataGridView1.Rows[n].Cells[1].Value.ToString();
            textBox6.Text = dataGridView1.Rows[n].Cells[1].Value.ToString();
            comboBox2.Text = dataGridView1.Rows[n].Cells[1].Value.ToString();
            comboBox3.Text = dataGridView1.Rows[n].Cells[1].Value.ToString();
            
        }
 
        private void Btn_Update_Click(object sender, EventArgs e)
        {
            UpdateRecords();
            ViewGrid();
        }
        void UpdateRecords()
        {
            Connection con = new Connection();
            SqlCommand cmd = new SqlCommand(@"UPDATE [dbo].[Profile]
   SET [фамилия] = '" + textBox2.Text + "',[имя] = '" + textBox3.Text + "',[отчество] = '" + textBox4.Text + "',[тип_учреждения] = '" + comboBox1.Text + "',[номер_учреждения] = '" + textBox6.Text + "',[отделение] = '" + comboBox2.Text + "',[профессия] = '" + comboBox3.Text + "' WHERE [id] = '" + textBox1.Text + "'", con.ActiveCon());
            cmd.ExecuteNonQuery();
        }
 
        void DeleteRecords()
        {
            Connection con = new Connection();
            SqlCommand cmd = new SqlCommand(@"Delete From [Profile] WHERE [id] = '" + textBox1.Text + "'", con.ActiveCon());
            cmd.ExecuteNonQuery();
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2016, 08:32
Ответы с готовыми решениями:

Строки нельзя добавить в коллекцию строк DataGridView, если элемент управления привязан к данным
Здравствуйте, столкнулся с такой проблемой, привязал datagridview к базе данных...

Добавление строк в datagridview, который привязан к данным
Здравствуйте, вот проблема: есть такая штука dataGridView1.DataSource =...

Удалить и добавить строку в dataGridView, если есть привязка к данным
Нужно удалить или добавить строку в dataGridView. Добавляю так:...

Нужно программным способом добавить в таблицу базы новую строку
Нужно программным способом добавить в таблицу базы новую строку, в которую...

Как заполнить БД программным способом
Доброго времени суток всем. возникла проблема как сделать вывод из textbox1...

4
Igr_ok
410 / 383 / 183
Регистрация: 04.08.2015
Сообщений: 1,055
02.04.2016, 09:05 2
Вместо foreach напишите просто
C#
1
dataGridView1.DataSource=dt;
0
Vladimir_Mensk
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 26
02.04.2016, 09:37  [ТС] 3
не получается... как объявить тогда item?
0
Igr_ok
410 / 383 / 183
Регистрация: 04.08.2015
Сообщений: 1,055
02.04.2016, 13:24 4
Цитата Сообщение от Vladimir_Mensk Посмотреть сообщение
не получается... как объявить тогда item?
item вам не нужен.
C#
1
2
3
4
5
6
7
8
9
10
void ViewGrid()
        {
            Connection con = new Connection();
            SqlDataAdapter sda = new SqlDataAdapter("Select * From Profile", con.ActiveCon());
            DataTable dt = new DataTable();
            sda.Fill(dt);
            //dataGridView1.Rows.Clear();
            dataSet1.Clear();
            dataGridView1.DataSource=dt;
        }
Судя по ошибке в первом посте, у dataGridView1 уже установлен DataSource. Если вам нужно просто обновить записи в гриде, воспользуйтесь приведенным мною кодом. Если нужно добавлять записи в грид, добавляйте их непосредственно в источник данных,а потом обновите грид.
0
Vladimir_Mensk
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 26
06.04.2016, 00:33  [ТС] 5
благодарю за помощь..!
0
06.04.2016, 00:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2016, 00:33

Добавление таблиц в БД программным способом
Добрый день Вот добавляю таблицу в БД с помощю кода String str; ...

Как перетаскивать окно программным способом?
Хочу сделать свою полосу заголовка со своими кнопками закрытия, свертывания и...

Отсортировать данные по одному из столбцов в DataGridView который привязан к DataTable
Мне необходимо отсортировать данные по одному из столбцов в DataGridView...


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

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

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